ASP.NET MVC中包含了AntiForgeryToken辅助方法,可以使用用户指定的令牌(token)来探测和阻断跨站请求伪造(CSRF)攻击。不过,在创建基本的Ajax请求或使用Knockout、Backbone这种包含JSON有效载荷(playload)的JavaScript框架时,需要对这种方法做一些修改。
AntiForgeryToken辅助方法与表单(Form)一起工作,后者以POST方式提交,包含一个用于存储令牌的隐藏字段。ValidateAntiForgeryToken只着眼于提交的表单值。要想让它能处理JSON请求,可以使用以下方法之一:
- 对于简单的jQuery Ajax请求,可以为每个页面创建单独的表单,包含存储令牌的字段,并将其显式地用于POST请求。
- Sergy Barskiy展示了如何创建自定义特性,以不同于解析普通有效载荷的方式来解析JSON有效载荷。
- Justin Etheredge展示了如何使用自定义的辅助方法来添加元头(meta-head)标签和自定义特性。
以上所有解决方案都依赖于直接设置__RequestVerificationToken字段的值。该字段是MVC框架中的常量。