关于iframe跨域操作

跨域操作对程序猿尤其是前端来说是一个又爱又恨的问题。

为什么浏览器禁止iframe跨域操作,举个栗子:

一个骗子,在自己网页嵌套一个银行的登录页面,除了网址,其他很难分辨是否是“李逵”还是“李鬼”,

当然银行网址和骗子的网址不相同,于是构成不同域。

受害人在这个网站的iframe输入银行帐号和密码,骗子通过外部的网页很简单的得到iframe内银行网站输入框的value()

jquery:keyup()

不禁止跨域操作,就是这么遣送的得到输入框的value();

什么是跨域:

博主有很多域名:

www.imcyk.com与blog.imcyl.com

www.imcyk.com与www.cykcykcykcyk.com

可以看出无论主域或者二级域名,只要不同便是跨域

为什么要跨域

1、黑客:例子所述之目的和xss攻击

2、二次开发人员:这些程序猿往往需要对一个公司不同网站之间进行串联互动,不同域名间的嵌套,例如博主

3、前端工程师:牵扯到网页就跟前端有关,别问我为什么,因为博主也是前端工程师

怎么跨域

这里先讲一个思路

A域名下有aaa.html

B域名下有bbb.html

aaa.html嵌套bbb.html

点击bbb.html的click事件调用aaa.html中的ifr()方法,恭喜你,浏览器禁止

那我们转变思路

A域名下有iframe.html页面

如何aaa.html嵌入的是iframe.html同域调用没问题

那如果bbb.html页面嵌套iframe.html 那么iframe..html调用aaa.html也是没问题的

于是iframe..html便是一个代理页面

如何跨域

页面所属和信息

B域名 bbb.html

A域名 aaa.html 、 iframe.html(代理页面)

目的

点击bbb.html的关闭可以remove掉aaa.htm的iframe

代码

bbb.html

<a href="javascript:closeparent()">[关闭×]</a>
<script>
function closeparent(){
if(typeof(exec_obj)=='undefined'){  
        exec_obj = document.createElement('iframe');  
        exec_obj.name = 'tmp_frame';  
        exec_obj.src = 'http://aaa.com/iframe.html';  //载入页面
        exec_obj.style.display = 'none';  
        document.body.appendChild(exec_obj);  
    }else{  
        exec_obj.src = 'http://www.wonyen.com/iframe.html' + Math.random();  //刷新页面
    }  
}
</script>

iframe.html

<script>
parent.parent.fMain();//载入页面立刻执行
</script>

aaa.html

<script>
function fMain(){
    $('iframe').remove();//移除
}
</script>

代码流程

bbb.html点击事件动态加载 iframe.html 

iframe.html加载后执行 parent.parent.fMain();

因为aaa.html 相对iframe.html为第二层父元素所以用到2个parent

aaa.html移除iframe


原文链接:,转发请注明来源!
「关于iframe跨域操作」评论列表

发表评论