Cookie安全
Cookie属性
Ultimate
cookie:
Set-Cookie: __Host-SessionID=3h93...;Path=/;Secure;HttpOnly;SameSite=Strict
Secure属性
Secure
属性指示cookie仅在请求使用 https:
方案时发送到服务器(localhost除外)。它只保护cookie对MitM攻击者的机密性 - 没有完整性保护。因此,具有此属性的cookie仍然可以通过访问客户端的硬盘或从JavaScript修改。
不安全的站点 http:
不能设置具有 Secure
属性的cookie(自Chrome 52和Firefox 52起)。对于Firefox,当 Secure
属性由localhost设置时,https:
要求被忽略(自Firefox 75起)。
HttpOnly属性
标有 HttpOnly
属性的cookie不能从JavaScript访问。HttpOnly
属性只保护cookie的机密性。HttpOnly
cookie可以通过从JavaScript溢出cookie jar来替换。
Path属性
Path
属性指示请求URL中必须存在的路径,以便浏览器发送Cookie头。它可用于防止来自同一主机上其他应用程序对cookie的未授权访问。
正斜杠 /
字符被解释为目录分隔符,子目录也被匹配。例如,对于 Path=/docs
:
请求路径
/docs
、/docs/
、/docs/Web/
和/docs/Web/HTTP
都将匹配。请求路径
/
、/docsets
、/fr/docs
将不匹配。
Cookie范围与同源策略

隔离共享主机上的两个不同应用程序

Domain属性
Domain
属性定义将向其发送cookie的主机。
如果未指定
Domain
属性,则默认为当前文档位置的主机,不包括子域IE将始终发送到子域,无论
如果指定了
Domain
属性,cookie将发送到该域及其所有子域
Expires属性
Expires
属性指示cookie的最大生存时间作为HTTP日期时间戳。
如果未指定
Expires
属性,cookie生存时间等于会话生存时间由浏览器决定会话何时结束
Non-persistent
会话cookie实际上可能被持久化以在浏览器重启后生存

参考资料:
Max-Age属性
Max-Age
属性指示cookie过期前的秒数。如果同时设置了 Expires
和 Max-Age
,则 Max-Age
优先。
SameSite
SameSite
属性防止浏览器将cookie与跨站点请求一起发送。SameSite
属性可以具有以下两个值之一(不区分大小写):
Strict
,表示浏览器仅为同站点请求发送cookie,即来自设置cookie的同一站点的请求。如果请求来自与当前URL不同的URL,则不会发送具有SameSite=Strict
属性的cookie。Lax
,表示cookie不会在跨站点请求上发送,例如加载图像或框架的请求,但在用户使用safe
HTTP方法从外部站点导航到源站点时发送(例如,当跟随链接时)。如果未指定SameSite属性,这是默认行为。safe
方法:GET, HEAD, OPTIONS
和TRACE
。None
,表示浏览器将cookie与跨站点和同站点请求一起发送。设置此值时还必须设置Secure
属性,如SameSite=None; Secure
。
参考资料:
Cookie前缀
Cookie前缀允许您传递有关cookie的元数据并通知客户端已设置某些属性。支持以下前缀:
__Secure-
告诉浏览器需要Secure
属性。__Host-
告诉浏览器需要Path=/
和Secure
属性,同时Domain
属性不应存在(因此,不能发送到子域)。
参考资料:
Cookie列表排序
RFC6265 标准定义了cookie的顺序:
2. 用户代理应按以下顺序对cookie列表进行排序:
* 具有较长路径的cookie列在具有较短路径的cookie之前。
* 在具有相等长度路径字段的cookie中,具有较早创建时间的cookie列在具有较晚创建时间的cookie之前。
因此,如果易受攻击的应用程序使用第一个cookie,您可以通过添加具有较长路径的 Path
属性来强制它使用您的cookie。
参考资料
最后更新于