托管在不同域上的 JavaScript 可以读取/修改另一个域的 DOM 吗?
Can a JavaScript hosted on different domain read/modify DOM of another domain?
我有一个关于托管在域(例如:CDN 的域,比如 example.com(但从不同域(例如,example.net(下的网站加载的 JavaScript 的潜在安全问题/限制的问题。
现在想象一下,加载的 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 加载脚本(
客户端 JavaScript 中所有基于 URL 的安全限制都基于包含加载 JS 的 <script>
元素的网页的 URL。
JS本身托管的URL无关紧要。
现在,我知道我无法从 JS 访问 mysite.com 下的 Cookie。
脚本加载到example.net
中并托管在 example.com
上。它可以从example.net
读取饼干。它无法从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。因此,您无法创建到任意站点的 iframe 并从父站点读取该 DOM,除非 CORS 已打开,或者您的脚本也在那里运行。
也许,是否有用户代理阻止托管在不同域上的 Javascript 访问执行脚本的页面中的元素?
做到这一点的唯一方法是将javascript沙盒化到位于不同域的iframe中。
因此,您可以创建一个sandbox.example.com
域,该域生成一个包含javascript的包装器页面。
然后,不要直接链接到 JS,而是创建一个到沙盒域的 iframe。JS将有权访问该域以及该DOM中的所有内容,但不能访问iframe之外的任何内容。
您仍然必须小心正确设置 cookie(不要使用通配符域等(。但它可以提供帮助。
- 从桌面读取python文件时高亮显示代码
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- TypeError:无法读取属性'推'未定义的JavaScript
- 在Safari执行javascript之前对其进行修改
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 修改d3.js圆环图以读取json数组
- 如何用程序读取和解析gruntfile,这样我就可以修改它并再次保存
- C#WebBrowser控件-使用DOM创建和修改javascript变量,然后使用Applet读取它
- 无法读取未定义的手动修改的属性“ui”
- 托管在不同域上的 JavaScript 可以读取/修改另一个域的 DOM 吗?
- 在HTML表被Javascript修改后读取它
- 脚本& lt; path>SVG中的数据(读取和修改)
- Javascript修改代码读取修改的对象
- 日志含义修改对象名称,读取JSON数据失败
- 从jQuery(304未修改)中读取txt文件
- 如何读取JSON文件和修改JQuery