使用cookie而不是会话来防止跨站点请求伪造


Using cookies instead of sessions to prevent Cross-Site Request Forgeries

我需要为现有站点添加CSRF保护,我指的是http://phpmaster.com/preventing-cross-site-request-forgeries/作为如何预防CSRF的指南。

在链接中,建议我们使用$_SESSION作为存储令牌的一种方式。我想知道使用$_COOKIE是否同样安全。与$_SESSION相比,使用$_COOKIE有什么缺点吗?

EDIT:您知道使用$_COOKIE而不是$_SESSION是否符合PCI标准吗?

在绝大多数情况下,PHP会话标识符也通过cookie(会话cookie)传输。

如果你的网站也是如此——几乎可以肯定是这样——那么考虑一下,如果攻击者访问了你的cookie(例如通过XSS)会发生什么:他们不需要CSRF,因为他们可以简单地劫持会话并从前门进入。结论:如果您将CSRF令牌存储在cookie中,则不会有额外的安全风险。

使用额外的CSRF cookie的一个小缺点是,它会使传入的HTTP流量增加一点点,但这实际上只是理论上的区别。