在我来自donain A的网页中,我在iframe中显示来自域B的另一个网站。我认为网站B可以选择一些新鲜颜色,所以我想编辑身体的背景颜色并将其改为蓝色。
如果我通过获取iframe的DOM来尝试使用javascript,然后编辑正文的背景颜色,我会收到一个安全错误,因为网站B在另一个域上。
如果打开开发人员工具(F12)并且我只是在那里编辑dom就可以了。
所以我真的很困惑:为什么浏览器允许我手动编辑dom,而不是javascript?显然,这种跨域策略的任何安全措施都应该被任何可以按F12的人所破坏,因此浏览器阻止访问是没有意义的。
或者,我可以用我的服务器抓取网站B,并将(非法)检索到的HTML放在我自己的网站中(颜色更好)。我再次绕过了跨域策略,从而做了跨域策略禁止我做的事情。
作为一个相关的问题,无论如何在iframe中使用javascript更改元素的颜色而不会出现跨域错误?
答案 0 :(得分:1)
Same Origin Policy可防止恶意Javascript与其他域进行交互 否则,攻击者可以编写与您的电子邮件或银行帐户静默交互的代码。
开发工具假设你不会成为邪恶并攻击自己。 (这个假设是not always true)
答案 1 :(得分:1)
为什么浏览器允许我手动编辑dom
如果是您的浏览器。它相信你。
但不是通过javascript?
您的浏览器不相信在域A上编写JavaScript的人有权访问在域B上编写页面的人提供给您的数据。
如果域名是您在电子邮件中找到的随机网站而域名B 是您的网上银行,该怎么办?
重要的是要记住,可能涉及三个人:
其中一些人可能是同一个人,但他们可能没有,浏览器无法分辨。
或者,我可以用我的服务器抓取网站B
在这种情况下,域B首先信任域A和数据。
域A无法访问您的浏览器有权访问的内容(例如域B的cookie),这可能会导致域B为您提供不同的数据(如您自己的银行记录)。
作为一个相关的问题,无论如何在iframe中使用javascript更改元素的颜色而不会出现跨域错误?
只有域B的合作,在这种情况下,您可以使用postMessage
要求域B更改颜色。 (域B必须注册事件监听器才能听到请求)。