我已经安装了 AntiCSRF HTTPModule,但我需要将它与 ajax 一起使用。
token 字段名称:RaiseException。
Cookie 名称:__CSRFCOOKIE。
我应该使用 ajax POST 手动发送 token 字段值还是还有其他事情要做?
而且由于我们在这里使用 cookie,所以任何人都不能创建一个具有相同名称和相同值的 cookie 并将出现在隐藏字段中的值发送到服务器并获取数据,或者对此有一些限制?!< br/> 谢谢
请您参考如下方法:
我不熟悉您正在使用的特定反 CSRF 模块。 ASP.Net 中内置了反 CSRF 支持,但它很难与 AJAX 配合使用。
大多数站点使用安全的 HTTP-only cookie 进行身份验证。所有浏览器都支持同源策略,这意味着只有创建 cookie 的站点才能访问它。
CSRF 攻击之所以有效,是因为黑客不需要查看 cookie,因为用户的浏览器会将它们与对您网站的任何请求一起发送。因此,黑客创建了一个向您的站点发送数据的表单:
<form action="yoursite.com/userAdmin/Create">
<input type="text" name="username" value="hackerUser" />
<input type="text" name="rights" value="godlike" />
...
</form>
黑客不是您网站的管理员,但他们可以诱骗正在为他们做事的用户。
大多数反 CSRF 保护都以相同的方式工作:通过要求 POST-ed 表单数据具有站点可以访问但黑客无法欺骗的额外 token 。
所以 .Net 的默认实现添加了一个带有 token 的 cookie,隐藏输入中的相同 token ,然后检查它们是否匹配。黑客看不到 cookie,因此无法重现隐藏的输入。
这是 AJAX 调用的问题,原因有二:
- .Net 将 token 生成为隐藏的输入标记,这意味着需要一些 Javascript 才能将其放入 AJAX 调用中。
- .Net 对 token 的检查假设它是一个表单输入,这意味着 JSON 调用以错误的格式传递它。
听起来您需要做的是手动将 token 字段名称的值添加到 AJAX 调用,并确保您正在发送表单数据。
