父页面操作iframe子页面的安全漏洞及跨域限制问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了父页面操作iframe子页面的安全漏洞及跨域限制问题相关的知识,希望对你有一定的参考价值。

一、父子交互的跨域限制

同域情况下,父页面和子页面可以通过iframe.contentDocument或者parent.document来交互(彼此做DOM操作等,如父页面往子页面注入css)。

跨域情况下,就会有限制,无法相互操作。

【解决办法】

1.主域不同
  没招

2.主域相同,子域不同
  以父(a.baidu.com)子(b.baidu.com)为例:
  这俩页面相互操作,要是想解决跨域限制,必须设置一个共同的主域,即document.domain="baidu.com"

 

二、禁止父页面操作子页面

现在很多公司的各个业务线都使用了同一套通行证体系,有时候为了方便不同业务线接口间的相互调用,会把a.baidu.com、b.baidu.com等的domain都设置为baidu.com,这就造成了一定的安全隐患。

黑客可以通过寻找某个安全防范较薄弱的业务线网站,比如c.baidu.com,绕过字符过滤注入xss攻击代码,在c.baidu.com的页面中创建一个x.baidu.com的iframe,往iframe中注入js代码,然后利用共享的通行证中的cookie和token,调用x.baidu.com中的某些ajax请求,对x.baidu.com进行跨站攻击。

【屏蔽掉此漏洞方案】

1.营造跨域,如上所述,跨域状态下,父子无权互相操作。各业务线的document.domain在使用完主域之后,一定要及时设置回自己的二级域名去。

2.禁止本站页面被其他页面以iframe形式调用。判断当前页如果被iframe包含,那么就改变当前页的url,从而避免被继续注入js脚本。

代码如下:if (window !== top) location.href = "about:blank";//跳转至空页面 也可以是任意url。如,http://ni.nongshalei

 

以上是关于父页面操作iframe子页面的安全漏洞及跨域限制问题的主要内容,如果未能解决你的问题,请参考以下文章

如何用javascript 跨域获取iframe子页面的元素信息

iframe子页面在跨域情况下使用父页面的方法

在IFrame中使用postMessage跨域

关于iframe父子的调用

iframe子页面js调用父页面中的控件报“拒绝访问”是啥原因,怎么解决?先声明不是跨域问题

iframe 父页面调用子页面方法