【问题标题】:CSRF and ever changing tokensCSRF 和不断变化的代币
【发布时间】:2013-01-15 00:16:01
【问题描述】:

我刚刚在 CSRF 上看到了 Doctype's 集。

他们在其中说,CSRF 的最佳预防措施是从一些用户唯一数据(例如,散列会话 ID)创建一个令牌,然后将其与您的请求一起发布。

生成一个难以猜测的值(例如 GUID)并将其存储为会话变量并将其作为隐藏字段放入页面中会不会不太安全?

每次加载页面时,该值都会发生变化,但 POSTed 数据的测试会在此之前进行。

在我看来,这同样安全。我错了吗?

【问题讨论】:

标签: security csrf


【解决方案1】:

令牌的来源可能不是那么有趣,只要它不可猜测或以任何方式确定即可。但是请注意在每个请求上生成一个新令牌,因为这意味着您的网站将不适用于打开两个或更多浏览器选项卡到您的网站的用户。通过在用户会话期间坚持一个令牌值,您可以规避此问题。

每次请求都更改令牌可以说更安全。但罚款很可能被认为太高了。就像涉及到安全性的几乎所有事情一样,您经常会发现您必须在用户体验的易用性方面做出权衡——给我找一个喜欢 CAPTCHA 的用户!为您的应用程序和用户找到适当的平衡点对您的安全性和可用性都很重要。

Open Web Application Security Project 上有一些关于 CSRF(以及更多)的好读物

另外请记住,如果您在受令牌保护的页面上只有一个跨站点脚本漏洞,那么您的 CSRF 令牌现在就没有用了。另请参阅OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet

【讨论】:

  • 我没有考虑过多个标签。感谢 Cheekysoft!
猜你喜欢
  • 2018-05-02
  • 2012-11-25
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
  • 2014-05-29
  • 2016-07-05
相关资源
最近更新 更多