为什么javascript不能改变iframe的dom,但是浏览器工具可以吗?

时间:2015-04-17 15:06:20

标签: javascript html iframe xss

在我来自donain A的网页中,我在iframe中显示来自域B的另一个网站。我认为网站B可以选择一些新鲜颜色,所以我想编辑身体的背景颜色并将其改为蓝色。

如果我通过获取iframe的DOM来尝试使用javascript,然后编辑正文的背景颜色,我会收到一个安全错误,因为网站B在另一个域上。

如果打开开发人员工具(F12)并且我只是在那里编辑dom就可以了。

所以我真的很困惑:为什么浏览器允许我手动编辑dom,而不是javascript?显然,这种跨域策略的任何安全措施都应该被任何可以按F12的人所破坏,因此浏览器阻止访问是没有意义的。

或者,我可以用我的服务器抓取网站B,并将(非法)检索到的HTML放在我自己的网站中(颜色更好)。我再次绕过了跨域策略,从而做了跨域策略禁止我做的事情。

作为一个相关的问题,无论如何在iframe中使用javascript更改元素的颜色而不会出现跨域错误?

2 个答案:

答案 0 :(得分:1)

Same Origin Policy可防止恶意Javascript与其他域进行交互 否则,攻击者可以编写与您的电子邮件或银行帐户静默交互的代码。

开发工具假设你不会成为邪恶并攻击自己。 (这个假设是not always true

答案 1 :(得分:1)

  

为什么浏览器允许我手动编辑dom

如果是您的浏览器。它相信你。

  

但不是通过javascript?

您的浏览器不相信在域A上编写JavaScript的人有权访问在域B上编写页面的人提供给您的数据。

如果域名是您在电子邮件中找到的随机网站而域名B 是您的网上银行,该怎么办?

重要的是要记住,可能涉及三个人:

  • 控制浏览器的人
  • 控制域名A的人
  • 控制域B的人

其中一些人可能是同一个人,但他们可能没有,浏览器无法分辨。

  

或者,我可以用我的服务器抓取网站B

在这种情况下,域B首先信任域A和数据。

域A无法访问您的浏览器有权访问的内容(例如域B的cookie),这可能会导致域B为您提供不同的数据(如您自己的银行记录)。

  

作为一个相关的问题,无论如何在iframe中使用javascript更改元素的颜色而不会出现跨域错误?

只有域B的合作,在这种情况下,您可以使用postMessage要求域B更改颜色。 (域B必须注册事件监听器才能听到请求)。