【问题标题】:Security concern when I transfer cookie session from HTTPS to HTTP将 cookie 会话从 HTTPS 传输到 HTTP 时的安全问题
【发布时间】:2011-07-06 23:03:23
【问题描述】:

在我的网站上,我有几个 HTTPS 页面和一些 HTTP 页面。当用户通过 HTTPS 登录时,会存储一个包含电子邮件地址等的 cookie。当用户点击我网站的 HTTP 页面时,该 cookie 会丢失,因为 cookie 已创建在 HTTPS 下。所以为了解决这个问题,我在我的 HTTP 页面中添加了这个 PHP 代码:

session_start();

$currentSessionID = session_id();

我假设这会获取为 HTTPS 页面存储的 cookie 并将其拉出以便 HTTP 可以看到它?这是任何可能的安全漏洞吗?我不确定 cookie 是否实际上是通过 HTTP 传输的,还是只是提取浏览器已经存储在 临时 Internet 文件中的内容?

【问题讨论】:

    标签: php security http session https


    【解决方案1】:

    是的,如果您曾在 HTTP 连接上设置识别 cookie,它们可能会被劫持,并且它们识别的帐户可能会被盗用。

    通过 HTTP 发送会话 cookie(这实际上是一件很常见的事情)是 Firesheep 工作的原因。基本攻击是:

    1. 用户通过 HTTPS 登录(这是安全的)。
    2. 服务器设置会话 cookie,以便识别用户。
    3. 用户开始通过 HTTP 浏览页面,根据定义,这涉及将会话 cookie 发送到未加密的服务器。
    4. 所有这些都非常普遍。许多站点(包括 Stack Overflow)仅使用 HTTPS 登录页面,然后通过 HTTP 为站点的其余部分提供服务。令人讨厌的是,同一网络上的攻击者可以监听 HTTP 流量,查找会话 cookie,然后使用它们来冒充他们识别的用户。这就是 Firesheep 所做的:您可以去星巴克,连接 wifi,打开 Firesheep 并劫持其他人的 Facebook 和 Twitter 帐户。

    好消息是,同网窃听攻击在大多数情况下并不是特别实用的攻击。 Firesheep 工作的唯一原因是因为全世界每个人都有一个 Facebook/Twitter/任何帐户,这意味着当您连接到星巴克的开放 wifi 时,会有帐户被劫持。

    你能做什么?

    • 将您的 cookie 设置为“安全”,以便它们仅通过 HTTPS 发送。
    • 将您的整个网站设置为通过 HTTPS 提供服务,并将所有经过身份验证的用户重定向到 HTTPS 资源。

    如果您不这样做,您可以依赖这样一个事实,即窃听不是一种特别实用的攻击,并且如果您的网站真的很受欢迎,那么对劫持您的网站的支持可能只会在 Firesheep 中实现;-)

    为了更直接地解决您的问题的细节:如果您的 HTTP 页面可以识别用户,那么该用户的帐户可能会被劫持,因为服务器唯一需要做的就是用户的 cookie。

    【讨论】:

    • 为什么 Stack Overflow 可以提供会话 cookie 明文?会话 cookie 不应该通过 HTTPS 传递吗?
    【解决方案2】:

    您正在尝试做的事情非常不安全,并且明显违反了OWASP A9。在任何时候都不能通过 HTTP 公开已通过身份验证或将要通过身份验证的会话 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-09
      • 2011-08-20
      • 1970-01-01
      • 2019-10-31
      • 2014-06-08
      • 2018-10-05
      • 2012-01-02
      • 2011-08-16
      相关资源
      最近更新 更多