哪个更安全的cookie:__Host前缀还是设置域名?

12

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

我还没有找到一个好的理由来判断哪种方法更好。我知道使用Domain属性有一些功能,比如允许子域使用cookie,这似乎是使用它而不是__Host的唯一原因。

但是如果所有条件相同且假设没有子域,您能解释为什么其中一种方法比另一种更好吗?

2个回答

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

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

__Host-前缀还可以保护您的Cookie免受托管在您域的不同子域上的网站覆盖。这是因为它们也受到仅主机标志的限制。
最后,未加密的连接会使您的网站容易受到中间人攻击。 __Host-前缀通过不允许未加密的连接使用带有此前缀的Cookie来解决此问题,从而在用户从http重定向到https时阻止恶意第三方注入与安全Cookie同名的set-cookie头。
如果需要设置域或路径属性,但仍希望使用__Host-前缀提供的安全性,则可以使用__Secure-前缀。像__Host-前缀一样,具有__Secure-前缀的Cookie只能从安全连接中设置。

2
这是一项安全功能。如果您的网站只是一个单独的静态页面(或没有子域等),那么这并不重要。
对于攻击面更大的高级应用程序,攻击者可能能够在您的子域上执行JS。例如通过上传某些内容、XSS或悬空DNS。
由于您的应用程序服务器看到了“__Host-”前缀,它可以确定该cookie是在域上设置的,而不是在受损子域上设置的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接