ada*_*101 368 cookies subdomain http
我有两个问题.我理解,如果我.mydomain.com在cookie中指定域(带有前导点),则所有子域都可以共享cookie.
可以subdomain.mydomain.com访问在mydomain.com(没有www子域)中创建的cookie 吗?
如果创建的话,可以mydomain.com(没有www子域)访问cookie subdomain.mydomain.com吗?
cmb*_*ley 582
2个域mydomain.com,subdomain.mydomain.com如果在Set-Cookie标头中明确命名域,则只能共享cookie .否则,cookie的范围仅限于请求主机.(这被称为"仅限主机的cookie".请参阅什么是仅限主机的cookie?)
例如,如果您从以下位置发送以下标头subdomain.mydomain.com:
Set-Cookie: name=value
Run Code Online (Sandbox Code Playgroud)
然后,cookie不会被发送给请求mydomain.com.但是,如果您使用以下内容,它将在两个域上都可用:
Set-Cookie: name=value; domain=mydomain.com
Run Code Online (Sandbox Code Playgroud)
在RFC 2109中,没有前导点的域意味着它不能在子域上使用,只有一个前导点(subsub.subdomain.mydomain.com)允许它跨多个子域(但不是顶级域)使用,所以你问的是在较旧的规范中不可能).
但是,所有现代浏览器都遵循较新的规范RFC 6265,并且会忽略任何前导点,这意味着您可以在子域以及顶级域上使用cookie.
总之,如果你设置一个像上面第二个例子那样的cookie .mydomain.com,它就可以被访问mydomain.com,反之亦然.
也可以看看:
Acc*_*t م 58
请大家注意,您可以从域上的子域设置 cookie。
(在请求的响应中发送subdomain.mydomain.com)
Set-Cookie: name=value; Domain=mydomain.com // GOOD
Run Code Online (Sandbox Code Playgroud)
但是您不能从子域上的域中设置 cookie。
(在请求的响应中发送mydomain.com)
Set-Cookie: name=value; Domain=subdomain.mydomain.com // Browser rejects cookie
Run Code Online (Sandbox Code Playgroud)
如果规范化的请求主机与域属性不匹配:完全忽略 cookie 并中止这些步骤。
域匹配
如果至少满足以下条件之一,则字符串域匹配给定的域字符串:
域字符串和字符串是相同的。(请注意,此时域字符串和字符串都将被规范化为小写。)
以下所有条件都成立:
域字符串是字符串的后缀。
未包含在域字符串中的字符串的最后一个字符是 %x2E (".") 字符。
该字符串是主机名(即,不是 IP 地址)。
所以“subdomain.mydomain.com”域匹配“mydomain.com”,但“mydomain.com”不域匹配“subdomain.mydomain.com”
也检查这个答案。
ako*_*nov 29
我不确定@cmbuckley的回答是否显示全貌.我读到的是:
除非cookie的属性另有说明,否则cookie仅返回到源服务器(而不是例如,返回到任何子域),并且它在当前会话结束时(由用户代理定义)到期.用户代理忽略无法识别的cookie.
也
8.6. Weak Integrity
Cookies do not provide integrity guarantees for sibling domains (and
their subdomains). For example, consider foo.example.com and
bar.example.com. The foo.example.com server can set a cookie with a
Domain attribute of "example.com" (possibly overwriting an existing
"example.com" cookie set by bar.example.com), and the user agent will
include that cookie in HTTP requests to bar.example.com. In the
worst case, bar.example.com will be unable to distinguish this cookie
from a cookie it set itself. The foo.example.com server might be
able to leverage this ability to mount an attack against
bar.example.com.
Run Code Online (Sandbox Code Playgroud)
对我而言,这意味着您可以保护cookie不被子域/域读取,但不能阻止将cookie写入其他域.因此,有人可能会通过控制同一浏览器访问的另一个子域来重写您的站点cookie.这可能不是一个大问题.
@cmbuckley提供的令人敬畏的cookie测试网站/那些像我一样错过了它的答案; 值得滚动和upvoting /:
lla*_*bda 16
以下是使用DOM cookie API(https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie)的示例,因此我们可以自己查看行为.
如果我们执行以下JavaScript:
document.cookie ="key = value"
它似乎与执行相同:
document.cookie ="key = value; domain = mydomain.com"
cookie 密钥在域mydomain.com上可用(仅).
现在,如果您在mydomain.com上执行以下JavaScript:
document.cookie ="key = value; domain = .mydomain.com"
cookie 密钥可用于mydomain.com以及subdomain.mydomain.com.
最后,如果您尝试在subdomain.mydomain.com上执行以下操作:
document.cookie ="key = value; domain = .mydomain.com"
cookie 密钥是否可用于subdomain.mydomain.com?我有点惊讶这是允许的; 我曾认为,如果子域能够在父域上设置cookie,则会违反安全规则.
如果您在本地主机上工作,请小心!如果你像这样在 JavaScript 中存储 cookie:
document.cookie = "key=value;domain=localhost"
Run Code Online (Sandbox Code Playgroud)
您的子域可能无法访问它,例如sub.localhost. 为了解决这个问题,您需要使用VirtualHost。例如,您可以使用 配置您的虚拟主机ServerName localhost.com,然后您将能够将 cookie 存储在您的域和子域上,如下所示:
document.cookie = "key=value;domain=localhost.com"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
250208 次 |
| 最近记录: |