客戶端腳本安全 書摘

摘自:《白帽子講Web安全》吳翰清 著 電子工業出版社

2.1同源策略(Same Origin Policy)是一種約定,它是瀏覽器最核心也最基本的安全功能。可以說web是構建在同源策略的基礎上的,瀏覽器只是針對同源策略的一種實現。

 

瀏覽器的同源策略,牽制了來自不同源的“document”或腳本,對當前“document”讀取或設置某些屬性。

 

例:在b.com加載的一段JavaScript腳本可以塗改b.com的頁面。但在,根據同源策略,a.com中的一段JavaScruot腳本,在b.com未曾加載此腳本時不能隨意塗改b.com的頁面。

 

 

瀏覽器中JavaScript的同源策略(當JavaScript被瀏覽器認爲來自不同源時,請求被拒絕)

影響“源”的因素有:host(域名或IP地址,如果是IP地址則看做一個根域名)、子域名、端口、協議。

 

對於當前頁面來說,頁面內存放JavaScript文件的域並不重要,重要的是加載JavaScript頁面所在的域是什麼。js的源是加載了該js的那個,而不是存放js文件的那個。

 


 

瀏覽器中,<script><img><iframe><link>等標籤都可以跨域加載資源,而不受同源策略的限制。這些帶“src”屬性的標籤每次加載時,實際上是由瀏覽器發起了一次GET請求。不同於XMLHttpRequest的是,通過src屬性加載的資源,瀏覽器限制了JavaScript的權限,使其不能讀、寫返回的內容。

 

XMLHttpRequest可以訪問來自同源對象的內容,但它受到同源策略的約束,不能跨域訪問資源。(如果XMLHttpRequest能跨域訪問資源,則可能會導致敏感數據泄露,比如CSRFtoken。)

 

W3C制訂了XMLHttpRequest跨域訪問標準,他需要通過目標域返回的HTTP頭來授權是否允許跨域訪問,因爲HTTP頭對於JavaScript來說一般是無法控制的(此方案的安全基礎“JavaScript無法控制HTTP頭”,當此信任基礎被打破,方案失效)。

 

瀏覽器,除了DOMCookieXMLHttpRequest會收到同源策略的限制外,瀏覽器加載的一些第三方插件也有各自的同源策略。(常見插件如FlashJava Applet、 Silverlight、 Google Gears

 例子:

Flash爲例,它主要通過目標網站提供的crossdomain.xml文件判斷是否允許當前“源”的Flash跨域訪問目標資源。

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章