Asp.net 我应该用CSRF的输入来保护div吗

Asp.net 我应该用CSRF的输入来保护div吗,asp.net,csrf,csrf-protection,Asp.net,Csrf,Csrf Protection,我想澄清的是,我不是一名安全专家,我也不是一名道德或黑帽黑客,或者任何与安全领域相关的人。我所知道的是,在创建带有表单的网页时,会采取措施保护表单免受跨站点请求伪造“CSRF”但在某些场景中,可以使用包含输入元素和按钮或可单击div的div元素来完成确切的工作 通常,在对表单进行编码时,ASP.NET会使用 @Html.Antiforgerytoken() 在razor页面的表单声明中 问题是:对一个包含输入和按钮的给定div执行相同的过程有用吗?该按钮是否会执行AJAX调用?是的,客户端解决

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

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

@Html.Antiforgerytoken()
在razor页面的表单声明中


问题是:对一个包含输入和按钮的给定div执行相同的过程有用吗?该按钮是否会执行AJAX调用?

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

在AJAX请求中,您必须自己发送令牌。使用jQuery,您可以使用
$.ajaxSetup()
beforeSend
钩子捕获任何状态更改请求并自动添加令牌(这通常适用于帖子,但即使应用程序使用GET更改内容,也可以放置、删除或GET)。在发送之前使用
的好处是,您只需执行一次,无需再记住它。本例中的令牌可以通过
@Html.AntiforgeryToken()
在页面中生成,javascript通常可以从中获取


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

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

在AJAX请求中,您必须自己发送令牌。使用jQuery,您可以使用
$.ajaxSetup()
beforeSend
钩子捕获任何状态更改请求并自动添加令牌(这通常适用于帖子,但即使应用程序使用GET更改内容,也可以放置、删除或GET)。在发送之前使用
的好处是,您只需执行一次,无需再记住它。本例中的令牌可以通过
@Html.AntiforgeryToken()
在页面中生成,javascript通常可以从中获取


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

感谢非常好的解释,这很有意义(y)感谢非常好的解释,这很有意义(y)