1. 程式人生 > >對於瀏覽器的同源策略你是怎樣理解的呢?

對於瀏覽器的同源策略你是怎樣理解的呢?

站長 你是 cmd 提升 聯盟 要求 tar 賬號密碼 不同的

作者:王泥煤
鏈接:https://www.zhihu.com/question/25427931/answer/30848852
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

1.什麽是同源策略
同domain(或ip),同端口,同協議視為同一個域,一個域內的腳本僅僅具有本域內的權限,可以理解為本域腳本只能讀寫本域內的資源,而無法訪問其它域的資源。這種安全限制稱為同源策略。
2.為什麽說同源策略限制了人類文明的發展
安全性和方便性是成反比的,十位數的密碼提高了安全性,但是不方便記憶。同樣,同源策略提升了Web前端的安全性,但犧牲了Web拓展上的靈活性。設想若把html、js、css、flash,image等文件全部布置在一臺服務器上,小網站這樣湊活還行,大中網站如果這樣做服務器根本受不了的,可用性都不能保證的話,安全性還算個吊? 所以,現代瀏覽器在安全性和可用性之間選擇了一個平衡點。在遵循同源策略的基礎上,選擇性地為同源策略“開放了後門”。

例如img script style等標簽,都允許垮域引用資源,嚴格說這都是不符合同源要求的。然而,你也只能是引用這些資源而已,並不能讀取這些資源的內容,不信你可以試試:在你自己的域內讀取百度logo圖片的內容,以讀取到二進制數據為準。 你很快發現這是不可能的,你頂多只能判斷這張圖片是否存在(使用的img標簽的onerror屬性 )。因此瀏覽器降低了那麽一點點安全性,卻大大提升網站布置的靈活性。
盡管瀏覽器開放了“後門”,然而現代文明卻仍不滿足。打破同源策略的方法有很多,拋開漏洞不談,Server端的大數據整合和瀏覽器的插件往往就充當著這樣一個角色。我有一個同事,由於在淘寶上買過一個自慰器,從此不管他打開哪個網站都會有自慰器的廣告投遞,弄得人家好尷尬。我手把手教他清除Cookie,發現者根本不奏效。(吐槽:我們使用的是一個公網IP,後來我吃驚的發現我的電腦中也出現了自慰器的廣告).好吧,這樣的例子還有很多。雖然,攻城獅們越來越肆無忌憚的浪,然而瀏覽器們依舊保持著他那份應有的節操(國產瀏覽器除外)。
3.如果沒有同源策略,普通用戶將無密可保。
盡管瀏覽器遵循同源策略,你仍可以發現你的訪問過的網站、買過的東西、搜索過的字串、甚至你的興趣愛好,都可以被遠端分析出來。我們姑且認為這些大數據分析者是有節操的,不會隨意泄露這些數據。如果瀏覽器不遵循同源策略,那麽情況更糟:網站站長、廣告聯盟、流量統計商、xss黑客,隨便哪個人都將無障礙的獲取私密信息,例如各個網站的Cookie、email的郵件內容、OA頁面的內容、QQ空間裏設置為隱私的照片等,不止這些,聽說過CSRF嗎,這裏不做科普,通過CSRF還可能用你的郵箱群發發郵件、在OA裏面填上你曠工一天、在第三方支付平臺裏自由轉賬、用你的賬號在知乎上胡亂發言降低你的big,等等。
感謝同源策略,我才有勇氣使用互聯網。
4.跨域漏洞
盡管各個瀏覽器都遵循都遠策略,可是通過一些奇淫巧計會繞過同源的限制進行跨域。舉個例子UC瀏覽器跨本地域XSS可盜取任意域Cookie ,一段js代碼本來是普通http域的權限,可是用過下載頁面的一個xss,從而具有了file域的權限,而file域對權限限制也不嚴格,允許從file域跨到任意一個http域權限去執行js代碼,經過了兩次跨域操作,最終實現了普通http域向任意一個域註射js的目的,同源策略被完全破壞。
4.最嚴重的跨域——跨特權域
所有跨域行為中最嚴重的莫過於跨特權域。在客戶端中,有一些域的權限比較高,例如file://這個協議域,ie中允許調用ActiveX執行cmd,Webkit中可以讀取磁盤上的文件。另外還有客戶端自定義的特權域,例如Chrome的chrome://downloads/域,有著執行exe的權限。這事兒太嚴重了,這不僅意味著任意一個網站都可以瀏覽/修改你的瀏覽器配置,而且可以不經你同意上傳文件,甚至會在你的電腦上安裝木馬。跨特權域最經典的例子莫過於黑哥去年講的 《跨過的那些客戶端》。

講到這裏題主應該理解了吧。 同源策略是瀏覽器最核心也最基本的安全功能

首先:web是開放的世界, 需要互聯鏈接. 你的網站, 可以使用別人的圖片, img,
使用別人 script 做統計, 做廣告聯盟

假設沒有同源, 互聯網世界是什麽樣?
  • 鏈接跳轉導致的問題.

, 放一個鏈接到 icbc.com, 然後 window.open來打開, 獲取窗口句柄, 然後可以擁有對這個頁面完全的控制權. 攔截表單,捕獲數據,將賬號密碼上傳到a.com.

  • ajax請求, 要啥就有啥.
你登錄jd.com; 然後打開a.com, 通過ajax 請求 的用戶信息接口, 這時候因為訪問的jd.com,所以瀏覽器自動帶上了jd的cookie,然後獲取到你的訂單list ,昵稱, 所有私密信息.

所以,需要要同源策略
在同一個域內,客戶端腳本可以任意讀寫同源內的資源,dom,cookie;但是不同的域,就不行.
鏈接:https://www.zhihu.com/question/25427931/answer/55286639

對於瀏覽器的同源策略你是怎樣理解的呢?