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

时间:2016-10-13 10:57:50

标签: asp.net csrf csrf-protection

我想清除我不是安全专家,我既不是道德黑客,也不是黑帽子黑客,或者与安全领域有关的内容,我所知道的是,在创建带有表单的网页时,需要对其进行测量保护表格免受跨站点请求伪造" CSRF"但在某些情况下,包含输入元素和按钮或可点击div的div元素可用于完成确切的工作。

通常在对表单进行编码时,将使用

在ASP.NET中保护其免受CSRF的影响
@Html.Antiforgerytoken()

在razor页面中的表单声明中

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

1 个答案:

答案 0 :(得分:0)

是的,客户端解决方案根本不重要。 CSRF是一个服务器端漏洞,对服务器的任何调用都会改变服务器状态(数据,基本上,还有登录,权限级别更改等),如果不受保护,则容易受到CSRF的攻击。<​​/ p>

在AJAX请求中,您必须自己发送令牌。使用jQuery,您可以使用$.ajaxSetup()beforeSend挂钩捕获任何状态查询请求并自动添加令牌(这通常适用于POST,但它可以是PUT,DELETE,甚至是GET,如果该应用程序使用GET来改变东西)。使用beforeSend的好处是您只需要执行一次而不再需要记住它。在这种情况下,令牌可以在@Html.AntiforgeryToken()的页面中生成,javascript可以从那里获取。

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