Preventing CSRF With Ajax

https://stackoverflow.com/a/24394578/3782855

You don‘t need the ValidationHttpRequestWrapper solution since MVC 4. According to this link.

  1. Put the token in the headers.
  2. Create a filter.
  3. Put the attribute on your method.

Here is my solution:

var token = $(‘input[name="__RequestVerificationToken"]‘).val();
var headers = {};
headers[‘__RequestVerificationToken‘] = token;
$.ajax({
    type: ‘POST‘,
    url: ‘/MyTestMethod‘,
    contentType: ‘application/json; charset=utf-8‘,
    headers: headers,
    data: JSON.stringify({
        Test: ‘test‘
    }),
    dataType: "json",
    success: function () {},
    error: function (xhr) {}
});
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class ValidateJsonAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        var httpContext = filterContext.HttpContext;
        var cookie = httpContext.Request.Cookies[AntiForgeryConfig.CookieName];
        AntiForgery.Validate(cookie != null ? cookie.Value : null, httpContext.Request.Headers["__RequestVerificationToken"]);
    }
}

[HttpPost]
[AllowAnonymous]
[ValidateJsonAntiForgeryToken]
public async Task<JsonResult> MyTestMethod(string Test)
{
    return Json(true);
}

Updated Anti-XSRF Validation for ASP.NET MVC 4 RC

Preventing CSRF With Ajax

You can try to apply the ValidateAntiForgeryTokenAttribute attribute to an action method, but it will fail every time if you try to post JSON encoded data to the action method. On one hand, the most secure action possible is one that rejects every request. On the other hand, that’s a lousy user experience.

The problem lies in the fact that the under the hood, deep within the call stack, the attribute peeks into the Request.Form collection to grab the anti-forgery token. But when you post JSON encoded data, there is no form collection to speak of. We hope to fix this at some point and with a more flexible set of anti-forgery helpers. But for the moment, we’re stuck with this.

原文地址:https://www.cnblogs.com/chucklu/p/11649821.html

时间: 2024-10-11 18:27:56

Preventing CSRF With Ajax的相关文章

Bypass Preventing CSRF

CSRF在过去的n年(n>2)一直都火,在bh/defcon/owasp等会议上多次探讨CSRF的攻防[具体你可以看看以往的那些pp].前 段时间PLAYHACK.net上发表了一个总结性的pp:Preventing CSRF,然而CSRF是很难彻底防止的,这个也是我说CSRF卑鄙无耻的一个原因,下面我的一些Bypass Preventing CSRF的tips:0x01.HTTP Referer 其实国内的CSRF攻击由来已久了,比如n年前的各大下载网站防止盗链,n前dvbbs的一个xss利用

Csrf 及ajax的csrf 请求

#!/usr/bin/python # -*- coding: UTF-8 -*- #验证码 import tornado.ioloop import tornado.web class CrsfHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): self.render("crsf.html") def post(self, *args, **kwargs): self.write("csr

CSRF之Ajax请求

A:Ajax提交数据是,携带的CSRF在data中: <form method="POST" action="/csrf.html"> {% csrf_token %} <input id="user" type="text" name="user" /> <input type="submit" value="提交"/> <

CSRF与AJAX

谨以此博客记录我今天踩的坑,AJAX的请求基本上与CSRF无缘了!!!(那为什么又有人说防csrf的方法之一是为XMLHttpRequest设置一个CSRFToken的头信息呢? ) 为什么说基本上呢?有两个原因:1.服务器配置原因,X-Requested-With: XMLHttpRequest在跨域请求中一般都会被去掉,貌似配置了的话就另说了 2.本人很菜,如果有大佬有很骚很骚的操作绕过的话另说了,同时请大佬也教教我,菊花献上!!!感谢 简单说下原因吧,其实今天花了几乎一下午的时间搞这个,其

MVC 应用免受 CSRF攻击

保护ASP.NET 应用免受 CSRF 攻击 CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF.CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一.其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很

漏洞科普:对于XSS和CSRF你究竟了解多少

转自:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显. 黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使

如何防止ASP.NET网站遭受CSRF的攻击

转载地址: http://www.cnblogs.com/shanyou/p/5038794.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF.CSRF(Cross Site Request Forger

浅谈CSRF攻击方式

一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 二.CSRF可以做什么? 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全. 三.CSRF漏洞现状 CSRF这

从零开始学CSRF

为什么要拿CSRF来当"攻击手法系列"的开头篇呢?因为CSRF/XSRF我个人喜爱他的程度已经超过XSS了.如果说XSS是一个老虎,那么CSRF就是隐藏在暗处的蛇. 相信现在很多人不明白CSRF是怎么运作,他和XSS的不同是在哪里.我这里就逐步为大家解释,并从浅入深的介绍CSRF. 入门 我们先来看看CSRF和XSS的工作原理,先让大家把这两个分开来. XSS: 攻击者发现XSS漏洞--构造代码--发送给受害人--受害人打开--攻击者获取受害人的cookie--完成攻击 CSRF: 攻