同源策略、跨域、jsonp

1.同源策略

是指瀏覽器普遍默認的一種安全策略;

例如:
一個惡意網站的頁面通過iframe嵌入了銀行的登錄頁面(二者不同源),如果沒有同源限制,惡意網頁上的javascript腳本就可以在用戶登錄銀行的時候獲取用戶名和密碼。

  • 同源:
    即是指URL具有相同的協議、域名、端口;可以理解為當前域名下的腳本,只能讀寫當前域名下的數據資源,而無法獲取其他資源;
2.跨域以及跨域有幾種實現形式

通過一些方法,突破同源策略的限制
實現方式包括

  • 降域
    (當域名有相同后綴時可使用,使用不多,容易產生安全問題,一個子頁面收到攻擊,所有數據都存在泄漏的風險)
    在當前域名及調用數據內部都添加
document.domain=XXXX...
XXX只能設置為當前域名的上一級~上N級域名、
可以繼續向下修改,不能向上進行修改
  • JSONP
  • CORS
3.JSONP的原理

在當前域創建一個函數XXX,創建一個動態script標簽,并將想要調用數據的域名設置為script的src值,且需要添加一個參數值callback=xxx,與之前創建的函數,聲明一致。這樣獲取到了需要的數據,并且在當前域執行xxx(data);

<script>
window.newfun=function(data ){   //當前域聲明一個函數
 alert()
}
<script>
 var script=document.createElement('script');  //創建一個動態script標簽
 script.src='//abc.com/ac.js?callback=newfun' //向服務器請求callback數據
document.body.appendChild('script'); //添加到頁面
<script>
</script>
//后臺服務器寫法
var callback=this.query.newfun;
this.body=callback+'(data)';
  • 缺點:
    如果a.com可以訪問b.com,那么完全可以讓c.com也訪問b.com,解決方法有要么用正則過濾掉不應該出現的字符串,要么約定好一套數據,比如cookies來互相匹配
    不能用post只能get

參考資料

4.CORS

Cross Origin Rescource Sharing 跨域資源共享
在調用數據文檔內加入響應頭,在當前域名直接用ajax調用即可

this.set('Access-Control-Allow-Origin','當前域名')

缺點是IE8,9兼容存在問題

更多其他跨域解決方法

本地模擬同源策略

首先找到系統的hosts文件(windows系統的路徑 C:\Windows\System32\drivers\etc)默認情況下,只有localhost指向本地IP 127.0.0.1,在hosts文件中我們可以為其添加多個域名


模擬同源策略
  • JSONP
   window.newfun=function(data){
      alert(data);}
    var script=document.createElement('script');
    script.type='text/javascript';
    script.src='//b.com/task31/data.php?callback=newfun';
    document.body.appendChild(script);
    </script>
//后臺
newfun('我是數據');
JSONP
  • CORS
    $.ajax({
      url:'//b.com/task31/data.php',
      type:'get',
      datatype:'json',
      // jsonp:'callback',
      success:function(data){
        console.log(data);
      },
      error:function(){
        console.log('there is problem');
      }
    })
//后臺
<?php
    header('Access-Control-Allow-Origin:http://a.com');
    $data='i am data';
    echo json_encode($data);
?>
CORS
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容