瀏覽器安全
絕大多數互聯網用戶使用聯網的工具是瀏覽器,隨著瀏覽器版本的不斷更新,瀏覽器的安全功能也變得越來越重要,總結了一下主要的瀏覽器安全功能。
一.同源策略
同源策略是一種約定,它是瀏覽器最核心的也是最基本的安全功能,很多時候瀏覽器的實現的同源策略是隱形的,透明的,瀏覽器的同源策略,限制了來之不同源的“document”或者腳本,對當前“document”讀取或者設置某些屬性,阻止瀏覽器的頁面行為發生混亂。
影響“源”的因素有:域名,子域名,端口,協議。對於當前頁面來說,頁面內存放JavaScript文件的域並不重要,重要的是加載JavaScript頁面所在的域是什麽。例如,a.com通過以下代碼:
<script src=http://b.com/b.js></script>
加載了b.com上的b.js文件,但是b.js文件是由a.com加載運行的,所以源應該是a.com而不是b.com。
在瀏覽器中,<script>,<img>,<iframe>,<link>等標簽都可以跨域加載資源,而不受同源策略的限制。這些帶“src”屬性的標簽每次加載時,實際上就是由瀏覽器發起了一次GET請求。不同於XMLHttpResquet的是,通過src屬性加載的資源,瀏覽器限制了JavaScript的權限,讓其不能讀,寫返回的內容
對於瀏覽器來說,不僅DOM,Cookie,XMLHttpRequest會受到同源策略的限制,瀏覽器加載的一些第三方插件和擴展也有各自的同源策略,最常見的插件如Flash,Java Applet,Silverlight,Google Gears等都有自己的控制策略。
以Flash為例,它主要通過目標網站提供的crossdomain.xml文件判斷是否允許當前“源”的Flash跨域訪問目標資源,從“源”的層面控制了Flash行為的安全性。Flash9版本後,還實現了MIME檢查以確認crossdomain.xml是否合法
二.瀏覽器沙箱
沙箱,已經泛指“資源隔離模塊”的代名詞,沙箱設置的目的就在於為了讓不可信任的代碼運行在一定的環境中,限制不可信任的代碼訪問隔離區外的資源。如果一定要跨越沙箱邊界產生數據交換,則只能通過特定的數據通道,比如經過封裝的API來完成,在這些API中會嚴格檢查請求的合法性。對於瀏覽器來說,沙箱技術,可以讓不受信任的網頁代碼,JavaScript代碼運行在一個受限制的環境中,從而保證本地桌面系統的安全。
瀏覽器發展出了多進程架構,每一個頁面就是一個進程,發生崩潰的時候,只會崩潰當前的頁面進程,不會影響到其他的頁面進程,既提高了安全性,又提升了用戶體驗。但瀏覽器安全是一個整體,雖有多進程架構和沙箱技術的保護,但是瀏覽器所加載的一些第三方插件卻往往不收沙箱管轄,一些三方插件一方面試自身脆弱,容易被攻擊,另一方面是有些三方軟件行為就是帶有惡意的。
三.惡意網址攔截
常見的惡意網址分為兩類:,一類是是“掛馬”網站,這些網站通常包含有惡意的腳本,通過利用瀏覽器的漏洞(包括一些插件和控件漏洞),執行shellcode,在用戶電腦中植入木馬;另一類就是釣魚網站,通過模仿知名網站的相似頁面來欺騙用戶。
針對惡意網址攔截,目前瀏覽器廠商以推送惡意網址黑名單為主,現在的瀏覽器多是與專業的安全產商展開合作,由安全產商或機構提供惡意網址黑名單。
四.其他安全措施
IE中有XSSFilter功能,用以對抗XSS。
Firefox中有Content Security Policy。其做法就是有服務器返回一個HTTP頭,並在其中描述頁面應該遵守的安全策略。使用CSP的用法如下,插入一個HTTP返回頭:
X-Content-Security-Policy:policy
其中policy的描述比較靈活,例如:
X-Content-Security-Policy:allow ‘self‘*.com
瀏覽器將信任來自mydomain.com及其子域下的內容。
再比如:
X-Content-Security-Policy:allow ‘self‘;img-src*;media-src medial.com; script-src userscripts.example.com
除了信任自身來源之外,還可以加在任意域的圖片,來自medial.com的媒體文件,以及userscripts.example.com的腳本,其他的規律一律拒絕。
CSP的設計理念是出色的,就是配置規則在頁面較多的時候有點復雜。
瀏覽器安全