Security 为什么在POST请求中需要CSRF令牌?

Security 为什么在POST请求中需要CSRF令牌?,security,csrf,Security,Csrf,我的理解是,CSRF可以防止攻击者使用标记让受害者的浏览器发送将使用会话cookie进行身份验证的请求。既然总是使用GET请求而不是POST提交,那么为什么需要在POST请求中使用CSRF令牌呢 此外,攻击者在无法运行代码(即XSS攻击)的情况下无法在网页中提交表单,在这种情况下,他们可以绕过您的CSRF保护 已经做了一些进一步的调查: 攻击者有可能在自己的站点上托管一个提交到目标站点(您的站点)的。他们所需要做的就是让受害者提交这份表格,然后连同他们的cookie和潜在的身份验证一起提交 攻击

我的理解是,CSRF可以防止攻击者使用
标记让受害者的浏览器发送将使用会话cookie进行身份验证的请求。既然
总是使用GET请求而不是POST提交,那么为什么需要在POST请求中使用CSRF令牌呢


此外,攻击者在无法运行代码(即XSS攻击)的情况下无法在网页中提交表单,在这种情况下,他们可以绕过您的CSRF保护

已经做了一些进一步的调查:

攻击者有可能在自己的站点上托管一个提交到目标站点(您的站点)的
。他们所需要做的就是让受害者提交这份表格,然后连同他们的cookie和潜在的身份验证一起提交

攻击者还可能将
注入您的站点,然后该站点将能够显示此恶意


我认为a对于我的用例来说是一个更好的解决方案。

已经做了一些进一步的调查:

攻击者有可能在自己的站点上托管一个提交到目标站点(您的站点)的
。他们所需要做的就是让受害者提交这份表格,然后连同他们的cookie和潜在的身份验证一起提交

攻击者还可能将
注入您的站点,然后该站点将能够显示此恶意


我认为对于我的用例来说,a是一个更好的解决方案。

攻击者可以在自己的站点上托管表单,但它不要求用户提交表单。他们可以使用JavaScript来实现这一点:


document.forms[0].提交()
IFrame注入更像是一个漏洞。XSS漏洞比CSRF漏洞更严重,因为可能造成更大的损害,并且它将始终覆盖您拥有的任何CSRF保护。确保始终正确地为输出所在的上下文编码输出(例如,根据需要为HTML或JavaScript编码)

查看-他们的最佳建议是使用同步器令牌模式,该模式看起来类似于中的链接,但可以与cookie结合使用


此外,这里还有一个指向的链接。

攻击者可以在自己的站点上托管表单,但不要求用户提交表单。他们可以使用JavaScript来实现这一点:


document.forms[0].提交()
IFrame注入更像是一个漏洞。XSS漏洞比CSRF漏洞更严重,因为可能造成更大的损害,并且它将始终覆盖您拥有的任何CSRF保护。确保始终正确地为输出所在的上下文编码输出(例如,根据需要为HTML或JavaScript编码)

查看-他们的最佳建议是使用同步器令牌模式,该模式看起来类似于中的链接,但可以与cookie结合使用


此外,这里还有一个指向跨站点请求伪造的链接。

跨站点请求伪造是指一个站点(比如evil.example.com)可以强制访问用户向另一个站点(比如example.com)发出请求。这并不是真正强迫用户,因为通过表单提交或javascript嵌入一个可以发送(HTTP GET请求)或POST请求的图像并不是那么困难

  • 您不应该通过HTTP GET请求进行状态或数据更改。img标签(get-request)不应该做出任何改变。如果你允许的话。。。住手。:)

  • POST请求需要包含远程攻击者无法猜测的值。通常,这是每个请求的随机值


  • 因此,是的,CSRF是一个已证明的已知漏洞,您应该尽力防范。

    跨站点请求伪造是指一个站点(比如evil.example.com)可以强制访问用户向另一个站点(比如example.com)发出请求。这并不是真正强迫用户,因为通过表单提交或javascript嵌入一个可以发送(HTTP GET请求)或POST请求的图像并不是那么困难

  • 您不应该通过HTTP GET请求进行状态或数据更改。img标签(get-request)不应该做出任何改变。如果你允许的话。。。住手。:)

  • POST请求需要包含远程攻击者无法猜测的值。通常,这是每个请求的随机值


  • 因此,是的,CSRF是一个已证明的已知漏洞,您应该尽力防范。

    Form POST不遵守同一来源策略。他们可以在任何网站上托管该表单。我认为您认为CSRF令牌(仅)用于抵御
    攻击的假设是错误的。其他可能的攻击是在恶意站点上使用javascript向目标站点发送隐藏的POST请求,或在恶意站点上发送伪造的表单…@JonasWielicki这是真的(我仍然在想这一切),还有
    注入也需要考虑。无论如何,我认为a将是一个更好的解决方案。Form POST不遵守同一原产地政策。他们可以在任何网站上托管该表单。我认为您认为CSRF令牌(仅)用于抵御
    攻击的假设是错误的。其他可能的攻击是在恶意站点上使用javascript向目标站点发送隐藏的POST请求,或在恶意站点上发送伪造的表单…@JonasWielicki这是真的(我仍然在想这一切),还有
    注入也需要考虑。我认为在我的情况下,a将是一个更好的解决方案。谢谢,所以另一个防止这种情况的方法是检查“来源”标题,以确保表单没有从其他站点提交。您认为这足以提供保护吗?您只需检查
    X-request-With
    标题,确保它是
    XM