ASP.NET MVC4/5 - Ajax 防止 CSRF攻击
2015-12-24 16:54
1121 查看
前言
CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。本文使用ASP.NET MVC提供的AntiForgery进行安全验证
应用
一、自定义FilterAttribute过滤器
二、视图
三、HomeController
四、Jquery使用Ajax发请求
1. 设置全局请求头header
2.ajax请求
五、备注:
1.如果Action上设置缓存,那么视图将不会再次调用@Html.AntiForgeryToken()生成新的,ajax请求还是携带上一次生成的token
CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。本文使用ASP.NET MVC提供的AntiForgery进行安全验证
应用
一、自定义FilterAttribute过滤器
/// <summary> /// 响应返回值 /// </summary> public class TActionResult { /// <summary> /// 创建一个返回值 /// </summary> /// <param name="content">返回值</param> /// <returns></returns> public static ActionResult CreateResult(string content) { var contentResult = new ContentResult { Content = content, ContentEncoding = Encoding.UTF8 }; return contentResult; } }
public class TValidateAntiForgeryTokenAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { try { var request = filterContext.HttpContext.Request; if (request.HttpMethod == WebRequestMethods.Http.Post) { if (request.IsAjaxRequest()) { var antiForgeryCookie = request.Cookies[AntiForgeryConfig.CookieName]; var cookieValue = antiForgeryCookie != null ? antiForgeryCookie.Value : null; //从cookies 和 Headers 中 验证防伪标记 //获取token var token = request.Headers["__RequestVerificationToken"]; //验证token AntiForgery.Validate(cookieValue, token); } else { new ValidateAntiForgeryTokenAttribute() .OnAuthorization(filterContext); } } } catch { filterContext.Result = TActionResult.CreateResult("无法验证Token!"); } } }
二、视图
@Html.AntiForgeryToken()
三、HomeController
[TValidateAntiForgeryToken] public string Test() { return "Token验证通过!"; }
四、Jquery使用Ajax发请求
1. 设置全局请求头header
$.ajaxSetup({ beforeSend: function (xhr) { //可以设置自定义标头 xhr.setRequestHeader('__RequestVerificationToken', $("input[name=__RequestVerificationToken][type=hidden]").val()); } })
2.ajax请求
$.post("/home/test",function(msg) { alert(msg); })
五、备注:
1.如果Action上设置缓存,那么视图将不会再次调用@Html.AntiForgeryToken()生成新的,ajax请求还是携带上一次生成的token
相关文章推荐
- 如何自动更新-CMD
- asp.net生成csv文件
- ASPX页面加载C#报错
- asp.net mvc杂项收集
- 避开WebForm天坑,拥抱ASP.Net MVC吧
- asp.net WebPages 速记3
- 避开WebForm天坑,拥抱ASP.Net MVC吧
- ASP.NET html转图片
- ASP.NET 对象的使用
- asp分页技术的实现
- Resharper让我们的asp.net开发效率提高三分之一
- asp.net WebPages 速记2
- asp.net WebPages 速记1
- kali攻防第12章 Metasploit之服务器蓝屏攻击
- 盘点PHP和ASP.NET的10大对比!
- ASP.NET MVC4(Razor)从客户端中检测到有潜在危险的 Request.Form 值
- ASP.NET中最保险最环保的返回404的方法
- 盘点PHP和ASP.NET的10大对比!
- Web Frame
- ASP+Access UTF-8 网页乱码问题解决办法