Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
Security 混淆CSRF保护策略_Security_Csrf_Owasp - Fatal编程技术网

Security 混淆CSRF保护策略

Security 混淆CSRF保护策略,security,csrf,owasp,Security,Csrf,Owasp,我正在测试一个web应用程序。CSRF在cookies和标头中应用和发送,但不是以隐藏输入的形式。csrf令牌不会针对每个请求更改,但会在会话期间更改。csrf令牌应多久更改一次?它应该根据会话或请求进行更改吗?客户端或服务器应该设置csrf令牌吗?应用csrf保护的最佳策略是什么?双重提交cookie?三重提交Cookie?还是其他新策略 我只想在这里一个接一个地回答你们的问题 CSRF令牌应多久更改一次 您可以在每个会话中更改一次CSRF令牌。每个请求更改一次不会带来真正的安全优势,如果有的

我正在测试一个web应用程序。CSRF在cookies和标头中应用和发送,但不是以隐藏输入的形式。csrf令牌不会针对每个请求更改,但会在会话期间更改。csrf令牌应多久更改一次?它应该根据会话或请求进行更改吗?客户端或服务器应该设置csrf令牌吗?应用csrf保护的最佳策略是什么?双重提交cookie?三重提交Cookie?还是其他新策略

我只想在这里一个接一个地回答你们的问题

CSRF令牌应多久更改一次

您可以在每个会话中更改一次CSRF令牌。每个请求更改一次不会带来真正的安全优势,如果有的话,这只是浪费资源和限制可用性的一种简单方法。例如,用户将无法点击“后退”按钮,因为他们将拥有过时的CSRF令牌,或者如果他们尝试使用新值重新提交表单(例如在验证错误后),表单可能不会发送

它应该根据会话或请求进行更改吗

如前所述,它应该在每个会话中更改。只有在登录时,用户才能在每个请求中获得新令牌。这是为了防止会话固定攻击导致CSRF攻击的可能性

例如:攻击者访问该站点并生成新会话。他们获取会话ID并将其注入受害者的浏览器(例如,通过从易受攻击的邻居域写入cookie,或使用另一个漏洞,如jsessionid URL),还将CSRF令牌注入受害者浏览器中的表单。他们等待受害者使用该表单登录,然后使用另一个表单post让受害者使用仍然有效的CSRF令牌执行操作

为了防止这种情况,请使CSRF令牌无效,并在您已经对会话ID执行相同操作的位置(如登录)发出一个新令牌,以防止会话固定攻击

客户端或服务器应该设置CSRF令牌吗

服务器-始终在服务器上根据OWASP指南,您希望从受信任的源生成令牌。这可确保您确切知道令牌的生成位置,并限制攻击面,因为攻击者无法控制服务器上发生的情况

应用CSRF保护的最佳策略是什么


我认为CSRF是一个非常深入的话题,不能用几句话来概括。这是一个小的研究和阅读可以走很长的路。我建议你看一下。

我只是想在这里一个接一个地回答你的问题

CSRF令牌应多久更改一次

您可以在每个会话中更改一次CSRF令牌。每个请求更改一次不会带来真正的安全优势,如果有的话,这只是浪费资源和限制可用性的一种简单方法。例如,用户将无法点击“后退”按钮,因为他们将拥有过时的CSRF令牌,或者如果他们尝试使用新值重新提交表单(例如在验证错误后),表单可能不会发送

它应该根据会话或请求进行更改吗

如前所述,它应该在每个会话中更改。只有在登录时,用户才能在每个请求中获得新令牌。这是为了防止会话固定攻击导致CSRF攻击的可能性

例如:攻击者访问该站点并生成新会话。他们获取会话ID并将其注入受害者的浏览器(例如,通过从易受攻击的邻居域写入cookie,或使用另一个漏洞,如jsessionid URL),还将CSRF令牌注入受害者浏览器中的表单。他们等待受害者使用该表单登录,然后使用另一个表单post让受害者使用仍然有效的CSRF令牌执行操作

为了防止这种情况,请使CSRF令牌无效,并在您已经对会话ID执行相同操作的位置(如登录)发出一个新令牌,以防止会话固定攻击

客户端或服务器应该设置CSRF令牌吗

服务器-始终在服务器上根据OWASP指南,您希望从受信任的源生成令牌。这可确保您确切知道令牌的生成位置,并限制攻击面,因为攻击者无法控制服务器上发生的情况

应用CSRF保护的最佳策略是什么


我认为CSRF是一个非常深入的话题,不能用几句话来概括。这是一个小的研究和阅读可以走很长的路。我建议您查看。

使用double submit,可以在现代浏览器的客户端上生成令牌(使用
Crypto.getRandomValues()
)。Double submit(尤其是客户端令牌生成)的风险稍高,但对于许多应用程序来说,这仍然是可以接受的,并且在某些情况下可能更容易。感谢Horkrine提供了详细的答案,剩下的一点是,我的应用程序中的csrf令牌不是作为表单中的隐藏输入提交的,它作为cookie作为标头发送,这是否被视为风险?顺便说一句,应用程序正在使用ssl和HSTS策略,正如我在owasp建议中所读到的,csrf令牌应该作为表单中的隐藏元素发送,我在许多java csrf保护实现中也看到了。嗨,汤姆。我总是将我的CSRF令牌作为隐藏元素放在表单中-我从未将它们放在cookie/标题中,因此我无法提供一个可靠的答案。但是,我已经找到了可能对youthanks Horkrine有用的方法,从您发送的链接中,我看不到在请求正文(作为隐藏表单字段)或作为cookie或作为标头发送csrf令牌之间存在安全性差异。。那么为什么owasp建议将其作为隐藏表单字段发送呢?可能是因为cookie和header参数比messa更容易访问