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

标签 javascript security xss same-origin-policy

我有一个关于托管在域(例如: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.htmlhttps://example.com/myscript.js 加载脚本)

最佳答案

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

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


Now, I know that I can't access Cookies under mysite.com from the JS.

脚本加载到example.net并托管于 example.com .它可以从 example.net 读取 cookie .它无法从 example.com 读取 cookie . (尽管 example.com 上的服务器端代码可以动态生成 JavaScript 并嵌入从 cookie 中提取的数据)。


But, I can access all the DOM on the page, and, in case, modify it.

Isn't this a possible security issue? Shouldn't this trigger the same-origin-policy protection?

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

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

不要从您不信任的网站嵌入 JS。


And, moreover, will the example above work also on HTTPS pages? (ex: https://example.net/index.html loads the script from https://example.com/myscript.js)

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

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

关于javascript - 托管在不同域上的 JavaScript 可以读取/修改另一个域的 DOM 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27403797/

相关文章:

javascript - 为什么 float 位置元素在元素缩小时不移动

javascript - Browser.ExecScript() 在更新窗口后停止工作

javascript - 为什么内联 JS block 不安全?

javascript - 在字段中键入和粘贴之间的区别

javascript - 处理用户上传图片时防止 'content-sniffing'类型漏洞?

javascript - Magento - validator 和 validator.validate() 之间的区别

javascript - 在共享主机上运行 socket.io

javascript - 使用 JavaScript 访问内部 DIV

security - 带有密码安全性的 Zip 文件?

javascript - 如何保护自己免受 XSS 攻击,同时显示用户期望看到的字符?