【web安全系列】(一)瀏覽器安全

做爲一個web開發人員,瀏覽器安全是不可或缺的知識。一方面,瀏覽器天生就是一個客戶端,若是具有了安全功能,就能夠像安全軟件同樣對用戶上網起到很好的保護做用;另外一方面,瀏覽器安全也成爲瀏覽器廠商之間競爭的一張底牌,瀏覽器廠商但願可以針對安全簡歷技術門檻,已得到競爭優點。

本文將給你們介紹一下瀏覽器的安全功能javascript

同源策略

同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,若是缺乏了同源策略,則瀏覽器的正常功能可能都會受到影響。能夠說Web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現。html

瀏覽器的同源策略,限制了來自不一樣源的「document」或腳本,對當前「document」讀取或設置某些屬性。java

這一策略很是重要,瀏覽器提出了「Origin」(源)這一律念,限制了來自不一樣Origin的對象沒法互相干擾。例如,瀏覽器打開兩個 tab 頁 A.html, B.html, A 頁面的腳本是沒法隨意修改 B 頁面的。web

對於 Javascript 來講,影響「源」的因素有: host,子域名,端口,協議。shell

須要注意的是,對於當前頁面來講,頁面內存放 Javascript 文件的域並不重要,重要的是加載 Javascript 的域是什麼跨域

換言之,a.com 經過如下代碼瀏覽器

<script src="http://b.com/b.js"></script>

加載了 b.com 上的 b.js,可是 b.js 是運行在 a.com 頁面中的,所以對於當前打開的頁面(a.com 頁面)來講,b.js 的 Origin 應該是 a.com 而不是 b.com。安全

在瀏覽器中,<script>,<img>,<iframe>,<link>等標籤均可以跨域加載資源,而不受到同源策略的限制。這些帶 「src」 屬性的標籤每次加載時,其實是由瀏覽器發起了一次 GET 請求,不一樣於 XMLHttpRequest 的是,經過 src 屬性加載的資源,瀏覽器限制了javascript的權限,使其不能讀寫返回的內容。服務器

可是 XMLHttpRequest 受到同源策略的約束,不能跨域訪問資源,在Ajax應用的開發中尤爲要注意這一點。架構

互聯網是開放的,隨着業務的發展,跨域請求資源愈來愈迫切,所以 W3C 委員會制定了 XMLHttpRequest 跨域訪問標準。它須要經過目標域返回的 http 頭來受權是否容許跨域訪問。

具體實現以後章節會陸續講到

對於瀏覽器來講,除了DOM、Cookie、XMLHttpRequest 會受到同源策略的限制外,瀏覽器加載的一些第三方插件也有個字的同源策略。最多見的插件如:Flash,Java Applet,Google Gears,Silverlight 等都有本身的控制策略。

然而瀏覽器的跨域策略也不是堅如盤石的堡壘,一些瀏覽器的同源策略也屢次被繞過,好比下面這個IE8的CSS跨域漏洞。

IE8的CSS跨域漏洞

前面提到,好比<script>等標籤僅能加載資源,但不能讀,寫資源的內容,這個漏洞可以跨域讀取頁面內容,所以繞過了同源策略,成爲一個跨域漏洞。

瀏覽器沙箱

Sandbox 即沙箱,計算機發展到今天,SandBox 已經成爲泛指「資源格力累模塊」的代名詞。沙箱的設計目的通常是爲了讓不可信任代碼運行在必定的環境中,限制不可信任的代碼訪問隔離區外的資源。若是必定要跨越 SandBox 邊界產生數據交換,則只能經過指定的數據通道,好比通過封裝的 API 來完成,在這些 API 中會嚴格檢查請求的合法性。

而對於瀏覽器來講,採用 Sandbox 技術,無疑可讓不受信任的網頁代碼運行在一個受限的環境中,從而保護本地文件的安全。

瀏覽器的多進程架構,將瀏覽器的各個功能分開,各個瀏覽器實例分開,當一個進程崩潰時,也不會影響到其餘進程。

Goole Chrome 是第一個採起多進程架構的瀏覽器。Google Chrome 的主要進程爲: 瀏覽器進程,渲染進程,插件進程,擴展進程。

多進程架構的一個很明顯的好處是,相對於單進程瀏覽器,在發生崩潰時,多進程瀏覽器只會崩潰當前的 Tab 頁,而單進程瀏覽器則會崩潰整個瀏覽器進程。

在現今的瀏覽器中,雖然有許多進程架構和 SandBox 保護,但瀏覽器所加載的一些第三方插件卻每每不受 Sandbox 管轄,好比近年來 Pwn2Own 大會上被攻克的瀏覽器,每每都是由於第三方插件出現的安全漏洞致使的。Flash,PDF, .NetFramework 在近年來都成爲瀏覽器攻擊的熱點。

惡意網站攔截

惡意網站攔截工做原理很簡單,通常都是瀏覽器週期性的從服務器獲取一份最新惡意網址的黑名單,若是用戶上網時訪問的網址存在於黑名單中,瀏覽器就會彈出一個警告頁面。

常見的惡意網址分爲兩類: 一類是掛馬網站,這些網站一般包含有惡意的腳本如 Javascript 或 Flash, 經過利用瀏覽器的漏洞(包括一些插件,空間漏洞)執行 shellcode,在用戶電腦植入木馬;另外一類是釣魚網站,經過模仿知名網站的類似頁面來欺騙用戶。

PhishTank 是互聯網上免費提供惡意網址黑名單的組織之一,它的黑名單由世界各地的志願者提供,且更新頻繁。

相似的,Google 也公開了其內部使用的 SafeBrowsing API,任何組織和我的均可以在產品中接入,以獲取Google的惡意網址庫。

除了惡意網址黑名單攔截功能外,主流瀏覽器都開始支持EV SSL證書,以加強對安全網站的識別。Extended Validation SSL Certificates翻譯爲擴展驗證型服務器證書(EV 服務器證書 或 EV SSL證書),申請該證書須要通過最完全的身份驗證,確保證書持有組織的真實性。應用該證書的網站,瀏覽器地址欄將呈現綠色,綠色地址欄將循環顯示組織名稱和做爲證書頒發機構的VeriSign的名稱,從而最大限度上確保網站的安全性,樹立網站可信形象,不給欺詐釣魚網站任何可乘之機。
圖片描述

所以網站在使用了 EV SSL 證書後,能夠教育用戶識別真實網址在瀏覽器地址欄中的「綠色」表現,以對抗釣魚網站。

廠商的行動

爲了在安全領域得到競爭力,微軟率先在 IE8 中推出了 XSS Filter 功能,利用對抗反射型 XSS,微軟率先推出這一功能,使得IE8在安全領域極具特點。

當用戶訪問的 URL 中包含了 XSS 攻擊腳本時,IE 就會修改其中關鍵字符使得攻擊沒法完成,並對用戶彈出提示。

20120515200131.png

Firefox 也不敢其後,在 Firefox 4 推出了 Content Security Policy(CSP),其作法是使用服務器返回的 X-Content-Security-Policy 頭部來告訴頁面應該遵照的規則。

X-Content-Security-Policy: policy

policy 的定義很是靈活,好比:allow 'self' *.mydomain.com 表示瀏覽器將信任 my domain.com 及其子域名下的內容

小結

瀏覽器的安全以同源策略爲基礎,加深理解同源策略,才能把握住瀏覽器安全的本質。


參考文獻
1. ie8 filter
  1. Content Security Policy
相關文章
相關標籤/搜索