对于 cookie 来说,哪个更安全:__Host 前缀或设置域?

iol*_*ian 12 security cookies https header domain-name

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

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

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

PHP*_*uru 14

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

如果域属性为[空],则将 cookie 的仅主机标志设置为 true。

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

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

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