摘要:概述同源策略是對代碼能夠操作哪些內容的一條完整的安全限制,也是由提出的一個著名的安全策略。同源策略的目的同源政策的目的,是為了保證用戶信息的安全,防止惡意的網站竊取數據。
[TOC]
1、概述同源策略是對JavaScript代碼能夠操作哪些WEB內容的一條完整的安全限制,也是由Netscape提出的一個著名的安全策略。所謂同源簡單來說就是“三個相同”,
**
1、域名相同
2、協議相同
3、端口相同
**
當我們使用多個元素或者打開其他瀏覽器窗口的時候,這一策略就會發揮它的作用,在這種情況下,同源策略負責管理窗口或者窗體中的JavaScript代碼以及和其他窗口的交互,具體來說,腳本只能讀取所屬文檔的來源相同的窗口和文檔屬性(當然我們也可以通過JS實現多個窗口和窗體,在本章我們不做解釋)當然同源策略也屬于一些理論性的知識點,存在于我們日常的使用中,了解這些能夠幫助我們更好的理解前端的安全及知識。
文檔的來源包含協議、主機,以及載入文檔的URL端口。
1、從不同的web服務器載入的文檔具有不同的來源。
2、通過同一主機的不同端口載入的文檔具有不同的來源。
3、使用http協議和https協議載入的文檔具有不同的來源。
即使他們來自同一個服務器。
腳本本身的來源與同源策略并不相關,相關的是腳本所潛入的文檔的來源,同時同源策略還會應用于XMLHttpRequest生成的HTTP請求,這個對象允許客戶端javascript生成任意的HTTP請求到腳本所屬文檔的服務器,但是不允許腳本和其他WEB服務器之間的通信,這就是我們常說的跨域請求,其實所謂的跨域就是受到了同源策略的約束,(當然我們可以通過其他的方式來解決跨域之間的請求的問題)。
同源政策的目的,是為了保證用戶信息的安全,防止惡意的網站竊取數據。
設想這樣一種情況:A網站是一家銀行,用戶登錄以后,又去瀏覽其他網站。如果其他網站可以讀取A網站的 Cookie,會發生什么?
很顯然,如果 Cookie 包含隱私(比如存款總額),這些信息就會泄漏。更可怕的是,Cookie 往往用來保存用戶的登錄狀態,如果用戶沒有退出登錄,其他網站就可以冒充用戶,為所欲為。因為瀏覽器同時還規定,提交表單不受同源政策的限制。
由此可見,"同源政策"是必需的,否則 Cookie 可以共享,互聯網就毫無安全可言了。
—— 摘自《瀏覽器同源政策及其規避方法》
3、文檔中設置同源:document.domain在某些情況下,同源策略就顯得比較嚴格了,比如在同一個域名下的其它子域名,例如兩個子域名:home.xiang.com和子域名order.xiang.com其中的一個子域名下需要合法的讀取另一個子域名地下的文檔的屬性,為了支持這種多域名站點,這時候我們可以使用document.dimin屬性來控制源,在默認情況下document.domain的值是載入文檔的服務器的主機名,當我們在設置這一屬性的時候,我們使用的字符串必須具有有效的域前綴或它本身。
因此如果一個dimin初始值是home.xiang.com的字符串我們可以設置為xiang.com。另外document.domain的值中必須又一個點號,不能把它設置為com或者其它頂級域名。
這時,如果兩個窗體或者窗口包含的腳本吧document.domain設置成了相同的值,那么兩個窗口就不再受同源策略的約束了。可以相互讀取屬性了。
4、請求中的 Access-Control-Allow-Origin受到同源策略的影響,同時我們也可以通過一些方法來達到跨域資源的共享,參見http://www.w3.org/TR/cors/ 這個標準和草案是用新的Origin:請求頭和新的Access-Control-Allow-Origin相應來擴展HTTP,它允許服務器用頭信息顯示的列出源,或使用通配符來匹配所有的源并允許由任何地址請求的文件,很多瀏覽器都使用這種新的頭信息來允許跨域的HTTP請求,這樣在我們的XMLHttpRequest就不會被同源策略限制。
5、跨文檔消息傳遞 window.postMessage()跨文檔消息,允許來自一個文檔的腳本可以傳遞文本消息到另一個文檔里的腳本,而不管腳本的來源是否相同,當我們調用window對象上的postMessage方法時就可以異步的將信息傳遞到指定的窗口文檔,此時被接受的窗口中可以通過onmessage()的方法來接收到傳遞過來的信息,但是不能調用其他文檔的方法或者讀取屬性。也就是說這只是一種通信技術,并非是去控制另一個文檔的內容。
postMessage()方法接受兩個參數,第一個參數是要傳遞的信息,HTML5標準中提到,該參數可以是任意基本類型的只或者是可以復制的對象,但是有些瀏覽器只支持字符串的傳遞,所有有時候傳遞的對象或者數組的時候需要進行轉換。第二個參數是一個字符串,是指定窗口的源,也就是指定窗口的document.domain屬性的值,這其中包括了協議、主機名、以及URL端口部分,(除了這些信息之外的信息都會被忽略),如果需要傳遞給任何窗口,此時這個只可以設置為*,如果要指定和當前窗口同源的話也可以使用/即可。
在目標窗口就會觸發onmessage()事件,該事件接收到的是一個對象,包含一下屬性:
data
作為第一個參數傳遞給postMessage()方法的消息副本內容。
source
消息源自的window對象。
origin
一個字符串,指定消息來源(URL)。——摘錄
本文大部分內容摘自《JavaScript權威指南》一書,詳細解說請參考書中內容。
作者的文章源地址 http://xiangzongliang.com/blo...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93690.html
摘要:概述同源策略是對代碼能夠操作哪些內容的一條完整的安全限制,也是由提出的一個著名的安全策略。同源策略的目的同源政策的目的,是為了保證用戶信息的安全,防止惡意的網站竊取數據。 [TOC] 1、概述 同源策略是對JavaScript代碼能夠操作哪些WEB內容的一條完整的安全限制,也是由Netscape提出的一個著名的安全策略。所謂同源簡單來說就是三個相同,**1、域名相同2、協議相同3、端口...
摘要:同源策略解釋之前,我們先簡單聊聊同源策略。當這些從第三方加載的腳本執行出錯,因為違背了同源策略為了保證用戶信息不被泄露,錯誤信息不會顯示出來,取而代之只會返回一個。 一些用戶向我們反饋,Fundebug的JavaScript監控插件抓到了很多Script error.,然后行號和列號都是0...這就很尷尬了。 showImg(https://segmentfault.com/img/b...
摘要:比如基于的方法我認為只有是正當的繞過同源策略的方法同源策略是瀏覽器安全策略的基礎,但同源策略面對很多攻擊是無能為力的,比如跨站腳本攻擊,名字跟同源策略很像,事實上他們之間基本沒有關系。 作者:肖光宇 野狗科技聯合創始人,先后在貓撲、百度、搜狗任職,愛折騰的前端工程師。野狗官博:https://blog.wilddog.com/ 野狗官網:https://www.wilddog.com...
閱讀 2991·2021-10-19 11:46
閱讀 984·2021-08-03 14:03
閱讀 2941·2021-06-11 18:08
閱讀 2911·2019-08-29 13:52
閱讀 2758·2019-08-29 12:49
閱讀 487·2019-08-26 13:56
閱讀 929·2019-08-26 13:41
閱讀 851·2019-08-26 13:35