代码之家  ›  专栏  ›  技术社区  ›  Matt Ellen Bipin Vayalu

CSRF和不断变化的代币

  •  0
  • Matt Ellen Bipin Vayalu  · 技术社区  · 16 年前

    我刚刚看到 Doctype's CSRF上的插曲。

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

    生成一个难以猜测的值(如guid)并将其存储为会话变量,并将其作为隐藏字段放入页面,这样会降低安全性吗?

    每次加载页面时,值都会更改,但对已发布数据的测试将在此之前进行。

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

    1 回复  |  直到 13 年前
        1
  •  5
  •   Cheekysoft Moz Morris    16 年前

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

    可以说,更改令牌每个请求都更安全。但是惩罚可能被认为太高了。就像几乎所有涉及到安全性的事情一样,你经常发现你必须权衡用户体验的易用性——给我找一个喜欢Captchas的用户!.为您的应用程序和用户找到正确的平衡对于您的安全性和可用性都很重要。

    有一些关于CSRF的好文章(还有更多)在 Open Web Application Security Project

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