Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 我必须防止跨域请求伪造吗?_Asp.net_Asp.net Mvc_Cross Domain_Nonce - Fatal编程技术网

Asp.net 我必须防止跨域请求伪造吗?

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

根据我的研究,防止这种情况的正确方法是在每个返回表单的GET请求中设置一个NONCE,然后在POST请求中检查NONCE。然而,有人仍然可以编写一个脚本,将我的表单和NONCE一起发送,然后用NONCE将其发回。


既然这是一个广为人知的漏洞,浏览器不应该通过不允许跨域ajax调用来解决这个问题吗?如果没有,ASP.NET MVC 4是否已经有一个内置机制来防止这种情况发生?

是的,有一个内置机制,可用于帮助保护您的应用程序免受跨站点请求伪造。要使用此功能,请从窗体调用AntiForgeryToken方法,并将该属性添加到要保护的操作方法中

CSHTML文件:

@Html.AntiForgeryToken()
控制器:

[ValidateAntiForgeryToken]
public ActionResult Edit(User updatedUser)
您将注意到令牌涉及两个安全措施——表单字段和cookie:

要生成反XSRF令牌,请调用@Html.AntiForgeryToken() 方法或Razor页面中的@AntiForgery.GetHtml()。 然后,运行时将执行以下步骤:

  • 如果当前HTTP请求已包含反XSRF会话 令牌(反XSRF cookie _RequestVerificationToken),安全性 从中提取令牌。如果HTTP请求不包含 反XSRF会话令牌,或者如果安全令牌提取失败, 将生成一个新的随机反XSRF令牌

  • 抗XSRF场 使用上述步骤(1)中的安全令牌生成令牌,并且 当前登录用户的标识

  • 如果新的抗XSRF 在步骤(1)中生成了令牌,将创建一个新的会话令牌 以包含它,并将其添加到出站HTTP Cookie中 收集步骤(2)中的字段标记将被包装在一个元素中,此HTML标记将作为返回 Html.AntiForgeryToken()或AntiForgery.GetHtml()的值

  • 阅读:


    是的,有一个内置的机制,可用于帮助保护您的应用程序免受跨站点请求伪造。要使用此功能,请从窗体调用AntiForgeryToken方法,并将该属性添加到要保护的操作方法中

    CSHTML文件:

    @Html.AntiForgeryToken()
    
    控制器:

    [ValidateAntiForgeryToken]
    public ActionResult Edit(User updatedUser)
    
    您将注意到令牌涉及两个安全措施——表单字段和cookie:

    要生成反XSRF令牌,请调用@Html.AntiForgeryToken() 方法或Razor页面中的@AntiForgery.GetHtml()。 然后,运行时将执行以下步骤:

  • 如果当前HTTP请求已包含反XSRF会话 令牌(反XSRF cookie _RequestVerificationToken),安全性 从中提取令牌。如果HTTP请求不包含 反XSRF会话令牌,或者如果安全令牌提取失败, 将生成一个新的随机反XSRF令牌

  • 抗XSRF场 使用上述步骤(1)中的安全令牌生成令牌,并且 当前登录用户的标识

  • 如果新的抗XSRF 在步骤(1)中生成了令牌,将创建一个新的会话令牌 以包含它,并将其添加到出站HTTP Cookie中 收集步骤(2)中的字段标记将被包装在一个元素中,此HTML标记将作为返回 Html.AntiForgeryToken()或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请求是