【问题标题】:What are the implications of sending cookies over secure connections in PHP在 PHP 中通过安全连接发送 cookie 的含义是什么
【发布时间】:2015-12-02 10:59:56
【问题描述】:

我最近开始密切关注 PHP 会话,以加强我网站的安全性。我遇到了session_set_cookie_params()。我对第四个参数(boolean secure)特别感兴趣。这是否意味着站点必须运行安全的 http ( https ) 协议才能将此参数设置为 true?如果不是,那么 PHP 如何通过安全连接为仅使用 http 协议的站点发送 cookie?

【问题讨论】:

  • PHP 不太关心这个参数。它只是发送一个相应的标志以及Set-Cookie: 标头。只有浏览器才能识别并采取行动。
  • @mario,如果我明白了,您是说即使不运行 https 的网站也可以将“安全”参数设置为 true,对吗?
  • 是的,他们可以。他们只是以后不会通过 HTTP 接收存储的 cookie。
  • @mario,问题又来了——他们只是稍后不会通过 HTTP 接收存储的 cookie。这是我想知道的含义之一,你不这么认为吗?
  • 如果您没有 ssl 证书并使用 https,则 cookie 将以纯文本形式传输,如果您使用 https,它将被加密。你基本上可以忽略“布尔安全”

标签: php http session cookies https


【解决方案1】:

默认情况下,所有请求(http 和 https)都会发送 cookie。

如果您将安全标志设置为 true,则浏览器将仅针对 https 请求发送它们。

始终为身份验证 cookie 设置安全标志很重要:即使 不发出 http 请求,其他人也可以强制浏览器这样做,即使您回答 301,它也是已经太晚了,它们已经以明文形式发送了。

对于完整的 https 网站,您可以系统地将安全标志设置为 true。

【讨论】:

    【解决方案2】:

    secure 标志是 cookie 规范的一部分。如果浏览器收到设置了secure 标志的cookie,它不会将此cookie 发送回服务器,除非连接是HTTPS 加密的。 PHP 将设置 cookie 而不管当前的连接状态如何,它最终并不知道也不关心 HTTPS 的存在;由您来确保您也通过 HTTPS设置 cookie。

    您应该通过 HTTPS 发送身份验证 cookie,以避免中间人或其他不安全网络(例如共享未加密的星巴克 Wifi)直接劫持会话。否则,从空中抢夺秘密会话标识符是真正的可能性,因此任何人都可以冒充任何人。这意味着在用户登录的整个过程中,它应该通过 HTTPS 与您的服务器通信,因为 cookie 一直在来回传输;仅对初始登录页面使用 HTTPS 是不够的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 2012-10-06
      • 1970-01-01
      • 2013-11-25
      相关资源
      最近更新 更多