可以设置域 cookie 破坏跨域安全性的 javascript 小书签吗?

Posted

技术标签:

【中文标题】可以设置域 cookie 破坏跨域安全性的 javascript 小书签吗?【英文标题】:Is a javascript bookmarklet that can set domain cookies breaking cross-domain security? 【发布时间】:2012-08-30 17:45:27 【问题描述】:

我正在创建一个可在各种域中使用的书签。我想设置一些 cookie 来存储这个小书签的临时设置,所以我假设从这个脚本设置一个 cookie 会将 cookie 分配给脚本源的域。

情况并非如此,小书签能够将 cookie 分配给当前正在查看的站点的域。这不适合我的需要(这会记住每个域的设置,而不是所有域的书签)。

我的问题是,这是否以某种方式破坏了跨域策略?还有一个后续问题,我如何存储小书签的 cookie 而不是它所使用的正确域。

【问题讨论】:

书签被认为是在安装它们的用户的支持下运行的。 【参考方案1】:

它不会破坏跨域策略,因为它实际上是在一个单独的域上运行的(这是小书签背后的点)。

如果您想存储 cookie 信息,请使用第 3 方服务(例如,拥有您自己的服务器,其中包含接受 cookie 更改的代码)。 请注意,这可能是一个安全问题,因为每个域都可以为您的用户获取 cookie,除非您将服务设为只写(我对此表示怀疑)。

还有另一种选择 - 不要将设置保存在 cookie 中。请改用其他存储介质。

【讨论】:

【参考方案2】:

书签在当前页面的上下文中运行,因此这是它们运行的​​安全上下文,因此这不会破坏跨域策略。您只能在当前页面的域上设置 cookie。因此,您的小书签不能拥有自己的 cookie。

这与从各种域加载到给定页面中的脚本相同。重要的是页面的来源,而不是脚本的来源。

据我所知,为您的脚本在所有域中保存一次设置的唯一方法是使用跨域 JSONP 并将设置存储在您的服务器上,但您仍然可能难以识别唯一用户。

听起来您正在尝试做的事情更适合具有插件本地存储的浏览器插件。

【讨论】:

这听起来像是最好的解决方案——浏览器插件(可以像用户脚本一样简单)可以使用本地存储来存储该插件的设置。小书签不能在其内部存储设置。 当然,您的第一句话已经为我澄清了这一点。例如,使用 Google Code 加载 jQuery 仍会将 cookie 存储在我的域中,而不是 Google。谢谢。

以上是关于可以设置域 cookie 破坏跨域安全性的 javascript 小书签吗?的主要内容,如果未能解决你的问题,请参考以下文章

cookie机制&跨域问题

如何安全地进行跨域认证?

javascript 跨域设置 cookie

使用 JSONP 和 cookie 进行跨域登录

js中cookie可以跨域取值吗

跨域 img 设置 cookie