WEB 安全是互聯網時代重點關注的問題,也是產品設計中必須考慮的一部分。做爲一個開發人員,有義務和責任打造安全可靠的 WEB 應用供用戶使用,保證用戶數據的機密性,完整性以及服務的可用性。
瀏覽器以協議頭、域名、端口的組合標識一個頁面的源。兩個頁面訪問的協議頭、域名及端口都相同,稱兩個頁面具備相同的源。
下表列出與http://store.company.com/dir/page.html
進行同源檢測的結果:html
頁面地址 | 檢測結果 | 緣由 |
---|---|---|
http://store.company.com/dir2... | 成功 | |
http://store.company.com/dir/... | 成功 | |
https://store.company.com/sec... | 失敗 | 協議差別(https/http) |
http://store.company.com:81/dir/etc.html | 失敗 | 端口差別(81/80) |
http://news.company.com/dir/o... | 失敗 | 子域名差別(news/store) |
跨源頁面之間使用 XMLHttpRequest 和 Fetch API 請求數據,經過<img>
,<link>
,<script>
等 HTML 標籤引用資源,這裏統稱爲資源訪問,都將受到瀏覽器的同源策略的控制。跨源資源訪問時,不一樣的交互方式默認有不一樣的瀏覽器限制:ajax
<img src="..." />
,<iframe src="..."/>
,<script src="..." />
等標籤引入其餘源資源,瀏覽器默認是容許的。瀏覽器最初使用 cookie 做爲本地存儲,H5新增 LocalStorage 和 IndexedDB 的存儲方式。
瀏覽器經過檢測 cookie 的 domain 屬性控制源,例若有 cookie: key=hello 的 domain 設爲.jaylin.wang
,local.jaylin.wang
,www.jaylin.wang
,jaylin.wang
都可訪問,有 cookie: key2=world 的 domain 設置爲local.jaylin.wang
, 則只有local.jaylin.wang
可訪問。cookie 的 httpOnly 屬性可控制cookie只能在服務端讀取。跨域
LocalStorage 和 IndexedDB 會根據不一樣源相互獨立,數據的寫入和讀取都是針對當前源的存儲,目前瀏覽器沒有提供跨源讀寫的支持。瀏覽器
瀏覽器默認的同源策略機制下,也爲開發者提供了改變的機制,列出經常使用的幾種方式:安全
在一個頁面中,經過設置 document.domain 的值,能夠將子域名的源設置爲父級域名。cookie
瀏覽器支持經過Content-Security-Policy
響應頭限制內容來源,確保加載內容的可信度。這個機制能夠減小 XSS 攻擊,dom
瀏覽器支持 CORS 配置可信的跨域讀資源,以適應WEB應用擴展的需求。網站
用戶在使用瀏覽器瀏覽網頁的過程當中,不乏有惡意網站給用戶帶來潛在的安全問題。常見的惡意網站有如下幾類:spa
瀏覽器一般會維護一份被舉報和惡意網站列表,檢測用戶將要訪問的目標網站存在於站點列表中,則提示警告信息以阻止用戶的繼續訪問。設計