首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >托管在不同域上的JavaScript可以读取/修改另一个域的DOM吗?

托管在不同域上的JavaScript可以读取/修改另一个域的DOM吗?
EN

Stack Overflow用户
提问于 2014-12-10 22:42:24
回答 2查看 13.8K关注 0票数 9

我有一个关于JavaScript的潜在安全问题/限制的问题,它托管在一个域(例如: CDN的域,比如example.com)上,但从另一个域(比如example.net)下的网站加载。

现在想象一下,加载的JavaScript将只读取/修改具有特定id的div中的文本,因此没有什么“复杂”。例如:我从http://example.com/myscript.js加载脚本,并在http://example.net/index.html上执行:注意不同的TLD!

代码语言:javascript
复制
<!-- Page example.net/index.html -->
<script src="http://example.com/myscript.js"></script>

我知道我不能从JavaScript访问mysite.com下的Cookie,但我可以访问页面上的所有DOM,以防万一,我可以修改它。这不是一个可能的安全问题吗?这不是应该触发同源策略保护吗?

是否有用户代理可以阻止驻留在不同域上的JavaScript访问执行脚本的页面中的元素?

而且,上面的例子也适用于HTTPS页面吗?(例如:https://example.net/index.htmlhttps://example.com/myscript.js加载脚本)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-10 22:43:57

客户端JavaScript中所有基于URL的安全限制都是基于包含加载JS的<script>元素的网页的URL。

JS本身所在的URL无关紧要。

现在,我知道我不能从JS访问mysite.com下的

该脚本将加载到example.net中并托管在example.com上。它可以从example.net读取cookies。它无法从example.com读取cookies。(不过,example.com上的服务器端代码可以动态生成JavaScript并嵌入从cookies中取出的数据)。

但是,我可以访问页面上的所有DOM,以防万一,还可以修改它。

这不是一个可能的安全问题吗?这不是应该触发同源策略保护吗?

这是一个潜在的安全问题,但它不应该触发同源策略。

通过加载脚本,页面的作者信任托管脚本的站点。

不要嵌入来自你不信任的站点的JS。

此外,上面的例子也适用于

页面吗?(例如:https://example.net/index.htmlhttps://example.com/myscript.js加载脚本)

具有不同方案的URL具有不同的来源,就像具有不同主机名的URL一样。同源策略规则是相同的,因为它们基于源,而不是源的特定特征。

有时,您会受到额外的限制,禁止通过HTTPS加载的页面访问通过HTTP加载的内容,因为这会破坏SSL安全性。这是一个与同源策略无关的不同安全限制。

票数 18
EN

Stack Overflow用户

发布于 2014-12-10 23:36:36

这不是一个可能的安全问题吗?

是的,这就是Cross-Site-Scripting (XSS)

这绝对是一个安全问题。

底线是,永远不会包含您不信任的任何域中的代码。故事到此结束。

如果攻击者可以让代码在您的域上运行,那么游戏就结束了。

这不应该触发同源策略保护吗?

不是的。

同源策略基本上意味着脚本只能查看/修改它加载到的域的DOM。因此,除非CORS处于打开状态,或者脚本也在那里运行,否则无法创建指向任意站点iframe并从父读取DOM。

也许,是否有用户代理可以阻止托管在不同域上的Javascript访问执行脚本的页面中的元素?

要做到这一点,唯一的方法是用沙箱将javascript放入位于不同域上的iframe 中。

因此,您可以创建一个javascript域,它将生成一个包含sandbox.example.com的包装器页面。

然后,不是直接链接到JS,而是创建到沙箱域的iframe。JS将可以访问该域和DOM中的所有内容,但不能访问iframe之外的任何内容。

你仍然需要小心正确地设置cookie(不要做通配符域,等等)。但这是有帮助的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27403797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档