MVC防止CSRF跨站请求伪造攻击

返回
Author Avatar
钢翼
2017-06-01
编程
156

在控制器的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);
}