我有一个关于托管在域(例如: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 的安全限制都是基于包含 <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 fromhttps://example.com/myscript.js
)
具有不同方案的 URL 具有不同的来源,就像具有不同主机名的 URL 一样。同源政策规则相同,因为它们基于原产地而不是原产地的特定特征。
有时您会受到额外的限制,即禁止通过 HTTPS 加载的页面访问通过 HTTP 加载的内容,因为这会破坏 SSL 安全性。这是与同源策略无关的不同安全限制。
关于javascript - 托管在不同域上的 JavaScript 可以读取/修改另一个域的 DOM 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27403797/