同源策略(Same Origin Policy)是一種約定,它是瀏覽器最核心也最基本的安全功能。
同源是指host、子域名、端口、協議。
在瀏覽器中,一些標籤(<script>、<img>、<iframe>、<link>等)是能夠跨域加載資源的而不受同源策略影響的。
對於瀏覽器來講,除了dom、cookie、xhr會受到同源策略限制外,瀏覽器加載的一些第三方插件也有各自的同源策略。比方說,flash它主要經過目標網站提供的crossdomain.xml文件(策略文件)判斷是否容許當前「源」的flash跨域訪問目標資源。
瀏覽器經過多進程架構和sandbox的保護,提升安全性。瀏覽器還會週期性地從服務端獲取一份最新的惡意網址黑名單,實現對惡意網址的攔截。web
XSS(跨站腳本攻擊):一般指黑客經過「HTML注入」篡改了網頁,插入了惡意的腳本,從而在用戶瀏覽網頁時,控制用戶瀏覽器的一種攻擊。
反射型XSS:惡意代碼並無保存在目標網站,經過引誘用戶點擊一個連接到目標網站的惡意連接來實施攻擊的。
存儲型XSS:惡意代碼會被存儲在服務器端。
常見的XSS payload(惡意腳本),經過讀取瀏覽器Cookie對象,從而發起「cookie挾持」攻擊。
XSS攻擊利用的技巧:利用字符編碼,繞過長度限制(location.hash自己沒有長度限制,可是瀏覽器的地址欄是有長度限制的,要是地址欄的長度也不夠用,還能夠再使用加載遠程JS的方法,來寫更多的代碼),使用<base>標籤,window.name(不少時候window對象不受同源策略限制)等。
XSS防護:
Cookie的「HttpOnly」標識能夠防止「Cookie劫持」。
驗證碼、修改密碼前輸入舊密碼這樣的功能都能有效的防止XSS payload。但這並不能限制住XSS攻擊。
輸入(輸出)檢查(客戶端和服務端都檢查)。跨域
csrf(跨站點請求僞造):
瀏覽器所持有的cookie分兩種,session cookie和Third-party cookie(本地cookie,保存在本地)。在瀏覽器進程的生命週期內,tab頁內session cookie都有效。利用這點,能夠跨站點僞造一些請求,帶上這個session cookie,以實現某種目的。瀏覽器
csrf能成功僞造一個請求,主要是能預測url的全部參數和參數值。安全
預防csrf:參數加密(某些url沒法被用戶收藏了,給數據分析工做帶來困擾),新增參數token等。服務器
ClickJacking(點擊挾持):
一種視覺上的欺騙手段。經過透明不可見的iframe,誘使用戶剛好點擊在iframe頁面的一些功能性按鈕上。cookie
有關安全的http響應頭:
X-Frame-Options:deny(拒絕當前頁面加載iframe),SAMEORIGIN(frame頁面的地址只能爲同域名下的頁面),ALLOW-FROM(定義能夠容許frame加載的頁面地址)。session
Content-Security-Policy:能夠在響應頭設置,也能夠在meta設置。具體設置查閱MDN。架構
X-XSS-Protection:當檢測到跨站腳本攻擊 (XSS)時,瀏覽器將中止加載頁面。
除非顯式修改,不然瀏覽器默認爲1:啓用XSS過濾。若是檢測到跨站腳本攻擊,瀏覽器將清除頁面(刪除不安所有分)cors
CORS:跨域資源共享。
出於安全緣由,瀏覽器限制從腳本內發起的跨源HTTP請求。 例如,XMLHttpRequest和Fetch API遵循同源策略。但若是響應報文包含正確的cors響應頭,能夠訪問跨域資源。
對於「非簡單請求」,瀏覽器先使用options方法發起預檢請求,從而獲取服務端是否容許該跨域請求。服務端確認後才發起實際的http請求。dom
參考: