从父级访问子域中设置的cookie

时间:2018-04-26 18:28:35

标签: javascript node.js http security cookies

我正在尝试从父域(small.example.org)访问子域(example.org)上的cookie集,我想从页面中的一些Javascript中执行此操作。

首先,我要为域名small.example.org

设置Cookie
document.cookie = "name=Mike; domain=small.example.org"

当我加载small.example.org时,我可以成功查看我刚设置的cookie。加载example.org时,我看不到来自small.example.org的任何Cookie。也许并不令人惊讶。

所以我想我需要向子域发出一个请求,要求在主域上包含一些东西,一个脚本标记。

<script src="small.example.org/script.js"></script>

现在,当我将example.org请求加载到脚本代码并查看浏览器时,我可以看到来自small.example.org的Cookie。

但是当我尝试使用document.cookie从Javascript访问它时,我什么都没得到。

这是预期的行为吗?我认为只有在设置了HTTPOnly标志的情况下才能从Javascript访问Cookie。

有办法解决这个问题吗?上面的例子非常接近我的实际用例场景,不幸的是我不能在架构上玩太多。

1 个答案:

答案 0 :(得分:2)

这是预期的行为。

如果Cookie的domain为:

,则JavaScript只能访问Cookie
  • 与当前页面主机名完全匹配
  • 当前页面主机名的子字符串

example.org无法读取small.example.org的Cookie(虽然相反情况并非如此)。

请注意,JavaScript的Origin由运行JS的HTML文档的URL决定,而不是由JS加载的URL确定。

你可以:

  • 更改设置Cookie时指定的domain
  • 在服务器上动态生成JS文件并使用服务器端编程插入数据(浏览器将在请求JS URL时在HTTP请求标头中发送cookie,因为域匹配)。