我是否应该使用针对 CSRF 的输入来保护 div

Should I secure div with inputs against CSRF

我想澄清一下,我不是安全专家,也不是道德黑客或黑帽黑客,也不是与安全领域相关的任何东西,我所知道的是,在创建带有表单的网页时,会采取措施保护表单免受跨站请求伪造 "CSRF" 但在某些情况下,包含输入元素和按钮或可点击 div 的 div 元素可用于完成确切的工作。

通常在对表单进行编码时,它会在 ASP.NET 中使用

来防止 CSRF
@Html.Antiforgerytoken()

在 razor 页面的表单声明中

问题是:使用包含输入和按钮的给定 div 执行相同的过程是否有用或是否有效,是否将执行 AJAX 调用?

是的,客户端解决方案根本不重要。 CSRF 是一个 server-side 漏洞,如果不加以保护,对服务器的任何更改服务器状态(基本上是数据,但也包括登录、特权级别更改等)的调用都容易受到 CSRF 的攻击。

在AJAX个请求中,您必须自己发送令牌。使用 jQuery,您可以使用 $.ajaxSetup()beforeSend 钩子来捕获任何 state-chaning 请求并自动添加令牌(这适用于一般的 POST,但它可以是 PUT ,DELETE,如果应用程序使用 GET 来更改内容,甚至 GET)。使用beforeSend的好处是你只需要做一次,不需要再记住了。这种情况下的令牌可以像往常一样在带有 @Html.AntiforgeryToken() 的页面中生成,javascript 可以从那里获取。

一个稍微特殊的情况是当您发送 json 数据时(请求的 content-type 是 application/json 而不是 www-url-encoded)。标准属性 [ValidateAntiForgeryToken] 不能从 json 中获取令牌(它也不能从请求 header 中获取令牌,如果您认为这是传递它的最佳选择)。在这种情况下,您可以实现自定义验证属性,但这很容易,您只需实现从何处获取令牌,对于实际验证您仍然可以使用标准 AntiForgery.Validate() 方法。