Car*_*rio 8 javascript security xss same-origin-policy
我有一个关于域上托管的JavaScript的潜在安全问题/限制的问题(例如:CDN的域,比如example.com),但是从不同域(例如example.net)下的网站加载.
现在想象一下,加载的JavaScript只会读取/修改div带有特定id的文本,所以没有什么"复杂".示例:我从http://example.com/myscript.js加载脚本,并在http://example.net/index.html上执行:[注意不同的TLD!]
<!-- Page example.net/index.html -->
<script src="http://example.com/myscript.js"></script>
Run Code Online (Sandbox Code Playgroud)
我知道我无法从JavaScript访问mysite.com下的Cookies,但我可以访问页面上的所有DOM,以防万一,修改它.这不是一个可能的安全问题吗?这不应该触发同源政策保护吗?
是否有用户代理阻止托管在不同域上的JavaScript访问执行脚本的页面中的元素?
此外,上述示例是否也适用于HTTPS页面?(例如:https://example.net/index.html从https://example.com/myscript.js加载脚本)
Que*_*tin 15
客户端JavaScript中的所有基于URL的安全性限制都基于包含<script>加载JS 的元素的网页的URL .
JS本身托管的URL无关紧要.
现在,我知道我无法从JS访问mysite.com下的Cookies.
该脚本已加载example.net并托管在其中example.com.它可以从中读取cookie example.net.它无法读取cookie example.com.(服务器端代码example.com可以动态生成JavaScript并嵌入从cookie中取出的数据).
但是,我可以访问页面上的所有DOM,以防万一,修改它.
是
这不是一个可能的安全问题吗?这不应该触发同源政策保护吗?
这是一个潜在的安全问题,但它不应该触发同源策略.
通过加载脚本,页面的作者信任托管脚本的站点.
不要从不信任的网站嵌入JS.
此外,上述示例是否也适用于HTTPS页面?(例如:
https://example.net/index.html从中加载脚本https://example.com/myscript.js)
具有不同方案的URL具有不同的来源,就像具有不同主机名的URL一样.同源策略规则与它们基于原点而非原始特征相同.
有时,您将获得额外的限制,其中禁止通过HTTPS加载的页面访问通过HTTP加载的内容,因为这会破坏SSL安全性.这是与同源策略无关的不同安全限制.
这不是一个可能的安全问题吗?
是的,这称为跨站脚本 (XSS)。
这绝对是一个安全问题。
底线,从不包含来自任何域、您不信任的代码。故事结局。
如果攻击者可以让代码在您的域上运行,那么游戏就结束了。
这不应该触发同源策略保护吗?
不。
同源策略基本上意味着脚本只能查看/修改它加载到的域的 DOM 。因此,除非开启 CORS,或者您的脚本也在那里运行,否则您无法为任意站点创建 iframe 并从父站点读取该 DOM 。
也许,是否有用户代理阻止托管在不同域上的 Javascript 访问执行脚本的页面中的元素?
做到这一点的唯一方法是在不同域的 iframe 中对该 javascript 进行沙箱处理。
所以你可以创建一个 sandbox.example.com域,它生成一个包含 javascript 的包装页面。
然后,不是直接链接到 JS,而是创建一个到沙盒域的 iframe。JS 将可以访问该域以及该 DOM 中的所有内容,但不能访问 iframe 之外的任何内容。
您仍然必须小心正确设置 cookie(不要使用通配符域等)。但它可以提供帮助。
| 归档时间: |
|
| 查看次数: |
11202 次 |
| 最近记录: |