【发布时间】:2017-06-28 02:17:25
【问题描述】:
当我在托管在 abc.com 的网页上嵌入托管在 xyz.com 上的 JS 时,似乎 xyz.com/test.js 可以读取和写入在 abc.com 上设置的所有键值。这不是被认为是巨大的安全漏洞吗?当您计划使用来自 Google Analytics 的任何第三方 JS 时,是否建议网站不要在本地存储中存储任何用户敏感信息?
这是一个例子 - https://jsfiddle.net/kuldeepk/eqawezd6/1/
localStorage.setItem('first-party', 'first-party');
window.Test.setKeyValue('third-party', 'third-party')
console.log(window.Test.getKey('first-party'))
console.log(localStorage.getItem('third-party'));
window.Test在第三方JS中声明
【问题讨论】:
-
是的,页面上加载的任何 JS 都可以从页面的域访问 cookie 和 localStorage。这就是您不应该在浏览器中存储敏感数据的原因之一(如果必须,请在服务器端对其进行加密并在服务器端对其进行解密)。在法国,我们的法律禁止在未经用户同意的情况下在本地存储数据,以及存储未加密的敏感数据,如用户电子邮件、密码等。
-
有趣。我很困惑为什么浏览器允许这个安全漏洞,而 cookie 却没有同样的设计缺陷。
-
“Cookies 没有同样的设计缺陷” ? jsfiddle.net/scwo1ba9
-
在该示例中,cookie 设置在同一个域中。 xyz.com 无法读取 abc.com 中设置的 cookie
-
有一个简单的测试你可以在你的本地机器上进行检查。在您的主机文件上映射一个完全不同的域,创建一个读取应用程序中存储的 js 文件并将其包含在您的 index.html 中,但使用此自定义域。例如,当您从本地主机访问 index.html 时,脚本甚至可以读取从另一个域加载的存储值。
标签: javascript browser cross-domain local-storage