Asp.net 我必须防止跨域请求伪造吗?
根据我的研究,防止这种情况的正确方法是在每个返回表单的GET请求中设置一个NONCE,然后在POST请求中检查NONCE。然而,有人仍然可以编写一个脚本,将我的表单和NONCE一起发送,然后用NONCE将其发回。Asp.net 我必须防止跨域请求伪造吗?,asp.net,asp.net-mvc,cross-domain,nonce,Asp.net,Asp.net Mvc,Cross Domain,Nonce,根据我的研究,防止这种情况的正确方法是在每个返回表单的GET请求中设置一个NONCE,然后在POST请求中检查NONCE。然而,有人仍然可以编写一个脚本,将我的表单和NONCE一起发送,然后用NONCE将其发回。 既然这是一个广为人知的漏洞,浏览器不应该通过不允许跨域ajax调用来解决这个问题吗?如果没有,ASP.NET MVC 4是否已经有一个内置机制来防止这种情况发生?是的,有一个内置机制,可用于帮助保护您的应用程序免受跨站点请求伪造。要使用此功能,请从窗体调用AntiForgeryTo
既然这是一个广为人知的漏洞,浏览器不应该通过不允许跨域ajax调用来解决这个问题吗?如果没有,ASP.NET MVC 4是否已经有一个内置机制来防止这种情况发生?是的,有一个内置机制,可用于帮助保护您的应用程序免受跨站点请求伪造。要使用此功能,请从窗体调用AntiForgeryToken方法,并将该属性添加到要保护的操作方法中 CSHTML文件:
@Html.AntiForgeryToken()
控制器:
[ValidateAntiForgeryToken]
public ActionResult Edit(User updatedUser)
您将注意到令牌涉及两个安全措施——表单字段和cookie:
要生成反XSRF令牌,请调用@Html.AntiForgeryToken()
方法或Razor页面中的@AntiForgery.GetHtml()。
然后,运行时将执行以下步骤:
是的,有一个内置的机制,可用于帮助保护您的应用程序免受跨站点请求伪造。要使用此功能,请从窗体调用AntiForgeryToken方法,并将该属性添加到要保护的操作方法中 CSHTML文件:
@Html.AntiForgeryToken()
控制器:
[ValidateAntiForgeryToken]
public ActionResult Edit(User updatedUser)
您将注意到令牌涉及两个安全措施——表单字段和cookie:
要生成反XSRF令牌,请调用@Html.AntiForgeryToken()
方法或Razor页面中的@AntiForgery.GetHtml()。
然后,运行时将执行以下步骤:
这些nonce用于防止跨站点请求伪造。跨域ajax调用并不是实现这一点的必要条件,浏览器也有相应的保护措施。CSRF是一个漏洞,因为当浏览器呼叫您的站点时,它会发送站点的会话信息,而不管通知浏览器呼叫的页面是什么。浏览器可以被告知向你的site.com发出get请求,方法是在site.com上包含一个指向你的site.com上的页面的img标记。如果在yoursite.com处理该get请求时验证了nonce,则evilsite.com的路过者将无法知道nonce。对于post请求也可以做类似的事情 此页面似乎有一些关于如何在ASP.NEt MVC中缓解此问题的信息: 干杯,
Stefan这些nonce用于防止跨站点请求伪造。跨域ajax调用并不是实现这一点的必要条件,浏览器也有相应的保护措施。CSRF是一个漏洞,因为当浏览器呼叫您的站点时,它会发送站点的会话信息,而不管通知浏览器呼叫的页面是什么。浏览器可以被告知向你的site.com发出get请求,方法是在site.com上包含一个指向你的site.com上的页面的img标记。如果在yoursite.com处理该get请求时验证了nonce,则evilsite.com的路过者将无法知道nonce。对于post请求也可以做类似的事情 此页面似乎有一些关于如何在ASP.NEt MVC中缓解此问题的信息: 干杯,
Stefan您还应该了解无状态CSRF保护的概念。实现这一点有两种标准方法:加密令牌模式和双重提交Cookie模式。利用Rijndael加密令牌,该令牌包含脚本无法读取的内置nonce值,是一种非常强大的加密结构。您还应该了解无状态CSRF保护的概念。实现这一点有两种标准方法:加密令牌模式和双重提交Cookie模式。利用Rijndael加密令牌,该令牌包含脚本无法读取的内置nonce值,并且是一个非常强大的加密结构。GET请求不应该引起关注,因为您永远不应该使用GET请求执行敏感任务。POST请求是