【问题标题】:Using cookies instead of sessions to prevent Cross-Site Request Forgeries使用 cookie 而不是会话来防止跨站点请求伪造
【发布时间】:2012-09-04 13:28:07
【问题描述】:

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

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

编辑:知道使用 $_COOKIE 而不是 $_SESSION 是否符合 PCI 标准?

【问题讨论】:

  • 我总是将会话 cookie(加密)存储在数据库中以进行比较,我相信这可以增强安全性...对于您的问题tuxradar.com/practicalphp/10/1/0
  • 糟糕,不小心删除了我的评论...再次重申:您需要确保用户的浏览器启用了 cookie。否则,他将无法提交任何表格。此外,cookie 加密是一个很好的关键字。否则可能会注入一个 CSRF cookie 并操纵您的 CSRF 检查。

标签: php session cookies


【解决方案1】:

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

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

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

【讨论】:

  • 我的站点设置无法使用会话。我们在分布式系统上设置了站点。
  • @GauravSharma:如果您不使用会话,那么 CSRF 如何应用?实际上,每个 用户请求(在您看来)都像是来自一个全新的用户。所以唯一的用户类型是“匿名”。
  • 我们正在使用客户端 cookie 来维护用户登录
  • @GauravSharma:因此,如果有人可以看到您的 cookie,他们就可以劫持您用户的会话。正如我在上面所写的那样,在那种情况下,他们为什么还要使用 CSRF 令牌呢?
  • 我不确定我是否理解。你是说因为我只使用 cookie 来存储任何会话数据,我不应该担心 CSRF,也不应该添加任何检查来防止它?
猜你喜欢
  • 2014-08-31
  • 1970-01-01
  • 2019-05-26
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
  • 2014-10-09
相关资源
最近更新 更多