MVC防止CSRF跨站请求伪造攻击
钢翼
编程
在控制器的action方法上添加以下特性
[ValidateAntiForgeryToken]
在页面的form标签内添加以下方法,该方法会自动生成隐藏域标签name="__RequestVerificationToken"的隐藏域
@Html.AntiForgeryToken()
如果是通过ajax提交的,处理起来比较复杂,在需要验证的ajax请求A之前发起另一个ajax请求B,去获取token,在得到token后,将token放到请求A的formdata的__RequestVerificationToken字段中。
获取token的后台代码如下:
[AllowAnonymous]
public ActionResult GetToken()
{
var token = AntiForgery.GetHtml().ToString();
Regex reg = new Regex(@"value=""([^""]+)");
var m = reg.Match(token);
return Content(m.Groups[1].Value);
}