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在执行之前都会进行拦截。
参考: