asp.net mvc 安全测试漏洞 "跨站点请求伪造" 问题解决

IBM Security Appscan漏洞筛查-跨站请求伪造,该漏洞的产生,有多种情况:

1.WebApi的跨站请求伪造,需要对WebApi的请求头部做限制(此文不做详细介绍);

2.MVC Action Post接口的跨站请求伪造,具体解决方案,请查看mvc 当中 [ValidateAntiForgeryToken] 的作用

3. MVC Action Get接口,例如: 跳转页面,数据查询等接口,使用验证HTTP Referer字段 防止跨站请求伪造攻击。

具体实现思路

定义RefererAttribute继承自ActionFilterAttribute,在Action执行之前,进行拦截;

  1. /// <summary>
  2. /// Referer(安全)拦截组件
  3. /// </summary>
  4. public class RefererAttribute : ActionFilterAttribute
  5. {
  6.     private ExcuteMode _customMode;
  7.     /// <summary>默认构造</summary>
  8.     public RefererAttribute(ExcuteMode Mode)
  9.     {
  10.         _customMode = Mode;
  11.     }
  12.  
  13.     /// <summary>
  14.     /// 安全认证
  15.     /// </summary>
  16.     /// <param name="filterContext"></param>
  17.     public override void OnActionExecuting(ActionExecutingContext filterContext)
  18.     {
  19.         //是否忽略
  20.         if (_customMode == ExcuteMode.Ignore)
  21.         {
  22.             return;
  23.         }
  24.         var request = filterContext.HttpContext.Request;
  25.  
  26.         if (request.Headers.Get("Referer").IndexOf(Config.GetValue("WebUrl")) > -1
  27.             || request.Headers.Get("Referer").IndexOf(Config.GetValue("NwWebUrl")) > -1
  28.             )
  29.         {
  30.             return;
  31.         }
  32.         else
  33.         {
  34.             throw new Exception("跨域防伪攻击:" + request.Headers.Get("Referer"));
  35.         }
  36.     }
  37. }

在Controller层增加特性,则所有Action在执行之前都会进行拦截。

参考:

IBM Security Appscan漏洞--跨站点请求伪造

posted @ 2018-07-29 11:31  沉淀的风  阅读(1583)  评论(0编辑  收藏  举报