【问题标题】:Is there method to prevent a cookie to be used on another computer?有没有办法防止 cookie 在另一台计算机上使用?
【发布时间】:2011-08-07 04:38:30
【问题描述】:

我在cookie中放了一些认证信息。出于安全原因,我想防止有人将 cookie 复制到另一台计算机并使用它来登录。我该怎么做?

【问题讨论】:

    标签: http authentication cookies security


    【解决方案1】:

    您不应将身份验证信息放入 cookie 本身。设置 cookie 时,您应该创建一个会话,绑定到一些持久性存储 (sql/nosql)。

    这基本上是一些与其他信息匹配的唯一随机生成的 ID。随机生成的 ID 作为 cookie 发送。在连续的请求中,您读取 cookie,并尝试从中获取用户帐户。

    您可以对只能从您分配给它的 IP 地址访问的会话设置限制。您也可以将其绑定到用户代理(尽管这是隐蔽的安全性,但可以配置用户代理)。

    【讨论】:

      【解决方案2】:

      如前所述,如果您将身份验证信息以明文形式放入 cookie,则应认真考虑使用会话之类的东西。

      一旦你有了会话,也许你可以将会话 ID 与后端的 IP 地址相关联,并检查会话 ID 和请求的 IP 地址是否匹配:这样,如果有人复制包含会话 ID 的 cookie 然后尝试远程访问站点,session id和IP不匹配,认证失败。

      【讨论】:

      • 如何获取客户端IP地址?我没有在 HTTP 协议中看到它。
      • 这里有一个 Python 示例:stackoverflow.com/questions/979599/…
      • 基本上,它实际上可能不是 HTTP 协议的一部分,但您的语言界面应该提供一些方法来获取它
      【解决方案3】:

      您可以使用可靠的、公开的、众所周知的算法对信息进行加密。然后,如果 cookie 被复制,接收者将无法从中收集任何信息。

      当然,这意味着您需要在服务器上进行加密和解密以确保其安全,否则(如果您使用 JavaScript)可以从 JavaScript 代码中获取私钥并用于解密 cookie。您还必须确定您收到的 cookie 是来自原始收件人还是副本。

      由于您必须在服务器端执行此操作才能使其正常工作,因此您也可以使用会话。这就像一个 cookie,除了传递一个 ID 而不是实际数据(该 ID 用于在服务器上查找数据。)但是仍然可以复制会话 cookie 并使另一台计算机看起来是以原始用户身份登录,这就是 FireSheep 所做的。

      【讨论】:

        【解决方案4】:

        没有,您永远不应该将敏感日期放在 cookie 中。

        对于身份验证信息,您应该使用会话。

        http://www.tizag.com/phpT/phpsessions.php

        【讨论】:

        • 会话是什么意思?据我所知,HTTP 中没有会话。 ASP.NET 会话可以用 cookie 实现。
        猜你喜欢
        • 2022-11-26
        • 2014-12-20
        • 2019-03-02
        • 2023-02-03
        • 1970-01-01
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多