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 框架中的常量。
要学习更多关于 ASP.NET MVC 令牌辅助方法如何阻止 CSRF 攻击的知识,可以阅读 Steven Sanderson 的文章。
查看英文原文: http://www.infoq.com/news/2012/10/anti-forgery-aspnet-json
感谢侯伯薇对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论