【问题标题】:Which is more secure for a cookie: __Host prefix or setting the Domain?哪个对 cookie 更安全:__Host 前缀还是设置域?
【发布时间】:2020-05-24 14:12:09
【问题描述】:

它们似乎都将 cookie 锁定到域,但它们不兼容(因为使用 __Host 前缀需要未设置域)。

我还没有找到一个更好的论据。我意识到使用 Domain 属性有一些特性,比如允许子域使用 cookie,这似乎是人们在 __Host 上使用它的唯一原因。

但是在所有条件相同并假设没有子域的情况下,你能解释一下为什么一个会比另一个更好吗?

【问题讨论】:

    标签: security cookies https header domain-name


    【解决方案1】:

    创建 __Host- 前缀是为了解决与 cookie 相关的许多安全问题,应始终在域属性上使用。将域属性留空实际上更安全,因为这样您的 cookie 将仅发送回设置 cookie 的同一主机。这在 RFC6265 中称为 host-only 标志:

    如果域属性为 [empty],则将 cookie 的 host-only 标志设置为 真的。

    __Host- 前缀还可以保护您的 cookie 不被托管在您域的不同子域上的网站覆盖。这是因为它们也受到 host-only 标志的限制。

    最后,未加密的连接会使您的网站容易受到中间人固定攻击。 __Host- 前缀通过不允许未加密的连接使用具有此前缀的 cookie 来解决此问题,从而阻止恶意第三方在用户从 http 重定向到 https 时注入与安全 cookie 同名的 set-cookie 标头。

    如果您需要设置域或路径属性,但仍需要 __Host- 前缀提供的安全性,您可以使用 __Secure- 前缀。与 __Host- 前缀一样,带有 __Secure- 前缀的 cookie 只能从安全连接中设置。

    【讨论】:

      【解决方案2】:

      这是一项安全功能。如果您的网站是单个静态页面(或没有子域等),则没关系。

      对于具有更大攻击面的更高级应用程序,攻击者可能能够在您的子域上执行 JS。例如,通过上传一些内容、XSS 或悬空 DNS。

      当您的应用程序服务器看到 __Host- 前缀时,可以确定 cookie 是在域上设置的,而不是在受损的子域上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-02
        • 1970-01-01
        • 1970-01-01
        • 2021-11-03
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 2019-09-13
        相关资源
        最近更新 更多