白帽子學習筆記——瀏覽器安全

同源策略:

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

在瀏覽器中,<script>,<img>,<iframe>,<link>等標籤都是可以跨域加載資源,不受同源策略影響,

這些帶"src"屬性的標籤每次加載時,實際上是有瀏覽器發起一次GET請求;

XMLHttpRequest通過src屬性加載的資源,瀏覽器限制了JavaScript的權限,使其不能讀,寫返回的內容;它可以訪問來自同源對象的內容,但不能跨域訪問資源;(若可以跨域訪問,則會導致CSRF的token泄露);

HTTP頭對於JavaScript來說一般是無法控制的,它可以通過HTTP頭授權是否允許跨域訪問;

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

www.qq.com的策略文件爲例,當瀏覽器在任意其他域的頁面里加載了flash後,如果對www.qq.com發起訪問請求,flash會先檢查www.qq.com上此策略是否存在;如果文件存在,則檢查發起請求的域是否在許可範圍內;

 

在這個策略文件中,只有來自*..qq.com和*.gtimg.com域的請求是被允許的;

 

在flash9及其以後版本中,還實現MIME檢查確認crossdomain.xml是否合法,如查看服務器返回HTTP頭部的Content-Type是否是text/*、application/xml、applicaton/xhtml+xml。(xml配置文件,用於過濾HTTP返回頭部是否合法,xml能把數據和HTML頁面進行分離),除了MIME檢查外,flash還會檢查crossdomain.xml是否在根目錄下,可以使得一些文件上傳的攻擊失效;

 

瀏覽器的多進程架構使得瀏覽器的各個功能模塊分開,各個瀏覽器實例分開,當一個進程崩潰時,也不會影響其他進程;

google chrome瀏覽器是第一個採取多進程架構的瀏覽器,google chrome 的主要進程分爲:瀏覽器進程,渲染進程,插件進程,擴展進程。插件進程如Flash,java,pdf等與瀏覽器進程嚴格隔離,因此不會互相影響;

渲染引擎由Sandbox隔離,網頁代碼要與瀏覽器內核進行通信、與操作系統通信都需要通過IPC channel,在其中會進行一些安全檢查;

Sandbox即沙箱,爲了讓不可信任的代碼運行在一定的環境中,限制不可信任的代碼訪問隔離區之外的資源;如果一定要跨越Sandbox邊界產生數據交換,則只能通過指定數據通道,比如經過封裝的API來完成,在這些API中會嚴格檢查請求的合法性;(沙箱可以對用戶提供的代碼進行隔離,防止用戶代碼破壞系統(如SQL注入,跨站腳本攻擊))沙箱可以針對本地文件系統、內存、數據庫、網絡的可能請求,可以採取默認拒絕的策略,對於有需要的請求,可以通過封裝API的方式實現;

 

 

IE瀏覽器 IE8中,通過XSS filter修改用戶訪問URL中包含XSS攻擊的腳本的關鍵字;

firefox中,有服務器端返回一個HTTP頭,並在其中描述頁面應該遵守的安全策略;(這是由於XSS攻擊在沒有第三方插件的幫助下,無法控制HTTP頭)使用CSP方法,插入一個HTTP返回頭,瀏覽器將信任來自mydomain.com及其子域名下的內容;

 

即瀏覽器除了信任自身來源外,還可以加載任意域的圖片,來自medial.com的媒體文件,以及userscripts.example.com的腳本,其他一律拒絕;

 

 

 

 

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