我有一个关于JavaScript的潜在安全问题/限制的问题,它托管在一个域(例如: CDN的域,比如example.com)上,但从另一个域(比如example.net)下的网站加载。
现在想象一下,加载的JavaScript将只读取/修改具有特定id的div中的文本,因此没有什么“复杂”。例如:我从http://example.com/myscript.js加载脚本,并在http://example.net/index.html上执行:注意不同的TLD!
<!-- Page example.net/index.html -->
<script src="http://example.com/myscript.js"></script>我知道我不能从JavaScript访问mysite.com下的Cookie,但我可以访问页面上的所有DOM,以防万一,我可以修改它。这不是一个可能的安全问题吗?这不是应该触发同源策略保护吗?
是否有用户代理可以阻止驻留在不同域上的JavaScript访问执行脚本的页面中的元素?
而且,上面的例子也适用于HTTPS页面吗?(例如:https://example.net/index.html从https://example.com/myscript.js加载脚本)
发布于 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.html从https://example.com/myscript.js加载脚本)
具有不同方案的URL具有不同的来源,就像具有不同主机名的URL一样。同源策略规则是相同的,因为它们基于源,而不是源的特定特征。
有时,您会受到额外的限制,禁止通过HTTPS加载的页面访问通过HTTP加载的内容,因为这会破坏SSL安全性。这是一个与同源策略无关的不同安全限制。
发布于 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(不要做通配符域,等等)。但这是有帮助的。
https://stackoverflow.com/questions/27403797
复制相似问题