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