IBM Security Appscan漏洞筛查-跨站请求伪造,该漏洞的产生,有多种情况:
1.WebApi的跨站请求伪造,需要对WebApi的请求头部做限制(此文不做详细介绍);
2.MVC Action Post接口的跨站请求伪造,具体解决方案,请查看mvc 当中 [ValidateAntiForgeryToken] 的作用;
3. MVC Action Get接口,例如: 跳转页面,数据查询等接口,使用验证HTTP Referer字段 防止跨站请求伪造攻击。
具体实现思路
定义RefererAttribute继承自ActionFilterAttribute,在Action执行之前,进行拦截;
-
/// <summary>
-
/// Referer(安全)拦截组件
-
/// </summary>
-
public class RefererAttribute : ActionFilterAttribute
-
{
-
private ExcuteMode _customMode;
-
/// <summary>默认构造</summary>
-
public RefererAttribute(ExcuteMode Mode)
-
{
-
_customMode = Mode;
-
}
-
-
/// <summary>
-
/// 安全认证
-
/// </summary>
-
/// <param name="filterContext"></param>
-
public override void OnActionExecuting(ActionExecutingContext filterContext)
-
{
-
//是否忽略
-
if (_customMode == ExcuteMode.Ignore)
-
{
-
return;
-
}
-
var request = filterContext.HttpContext.Request;
-
-
if (request.Headers.Get("Referer").IndexOf(Config.GetValue("WebUrl")) > -1
-
|| request.Headers.Get("Referer").IndexOf(Config.GetValue("NwWebUrl")) > -1
-
)
-
{
-
return;
-
}
-
else
-
{
-
throw new Exception("跨域防伪攻击:" + request.Headers.Get("Referer"));
-
}
-
}
-
}
在Controller层增加特性,则所有Action在执行之前都会进行拦截。
参考: