Skip to main content
 首页 » 编程设计

c#之将 AntiCSRF 与 ajax 结合使用

2024年01月12日35del

我已经安装了 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 调用,并确保您正在发送表单数据。