【问题标题】:Is a cookie secure in a HTTPS connection?HTTPS 连接中的 cookie 是否安全?
【发布时间】:2012-12-18 00:02:02
【问题描述】:

HTTPS 连接中的 cookie 安全吗?

【问题讨论】:

  • 不,不是自动的。使用github.com/delight-im/PHP-Cookie 或类似的本机函数,使用$cookie->setSecureOnly(true); 将在不安全的HTTP 上防止劫持,使用$cookie->setHttpOnly(true);防止劫持通过您页面中的 XSS 漏洞等。所以为了判断一个cookie是否“安全”,首先需要定义威胁模型。通过普通 HTTP 或 XSS 窃取 Cookie 是您通常应该关心的。

标签: php cookies


【解决方案1】:

它与服务器之间的传输是加密的,因此它与 TLS 一样安全。

您还可以通过在“Set-cookie”响应标头中添加“HttpOnly”标志来将 cookie 标记为仅用于客户端->服务器通信,并阻止来自客户端 Javascript 的访问。

edit — 正如@Bruno 建议的那样,您还可以使用“安全”标志(在同一个标​​头中)告诉浏览器 cookie 应该只在 https 中发送回服务器要求。作为@D.W.在较新的评论中指出,这可能非常重要,因为您几乎肯定不希望您的重要安全 cookie 可能在不安全的交互中传输(例如,在从站点的非安全公共部分登录之前)。如果所有与特定 cookie 域的交互都是 HTTPS,那么这可能没有必要,但它是如此简单,没有理由不这样做。

edit — 更新,很久以后:使用 secure 标志:)

【讨论】:

  • 使用安全 cookie 标志也是值得的。
  • 这个答案是错误的。如果设置了安全标志,则 cookie 仅“与 TLS 一样安全”。否则,中间人或潜在的被动窃听者可以获知 cookie 值(因为如果未设置安全标志,它将通过未加密会话以明文形式发送)。
  • @D.W.这是一个很好的观点 - 我会将其添加到答案中。请注意,我已经提到了“安全”标志及其作用。
  • 尖尖的,感谢您的更新!这是部分改进。但是,第一句话仍然是错误的。如果您不设置安全 cookie,那么 cookie 与 TLS 一样安全是不正确的。网络攻击者(例如 MITM)可能会导致您的浏览器在您不知情的情况下访问非 https 站点,从而在不破坏 TLS 的情况下泄露 cookie。您的最后一段没有认识到攻击者可以在您不知情的情况下强迫您访问非 https 站点,因此无法确保所有交互都通过 HTTPS;因此,您必须设置安全标志。
  • @D.W 好吧,我猜这是一个语义问题——“作为 TLS 安全”,我的意思是 cookie,当通过 SSL/TLS 传输时,是安全的。也就是说,这句话明确地是关于 cookie 何时“加密传输到服务器和从服务器传输”。当它加密时,当然,它不安全:-)
【解决方案2】:

Cookie 在 HTTP 标头中发送。因此,它们与 HTTPS 连接一样安全,HTTPS 连接取决于许多 SSL/TLS 参数,例如密码强度或公钥​​长度。

请记住,除非您为 Cookie 设置 Secure 标志,否则 Cookie 可以通过不安全的 HTTP 连接传输。存在使用此类不安全 Cookie 窃取会话信息的中间人攻击。因此,除非您有充分的理由不这样做,否则当您希望它们仅通过 HTTPS 传输时,请始终为 Cookie 设置安全标志。

【讨论】:

    【解决方案3】:

    在连接中,是的。但它仍然未加密地存储在客户端的机器上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-14
      • 2016-03-14
      • 2011-09-25
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 2017-11-27
      • 2013-05-01
      相关资源
      最近更新 更多