今天主要複習了一些比較常見的網絡徹底的問題javascript
XSS攻擊html
他主要的作法就是在頁面上執行一段javascript,獲取網站的信息,如cookie,他主要分幾個類型:java
反射型,如在img中的url是一段帶<script>的代碼;他主要是設計一個url來獲取客戶信息web
保存型:
這種是腳本保存在數據庫中,不通過濾就存儲並顯示給用戶。實現這個過程主要分兩步,先將惡意代碼數據提交給服務器;而後服務器再將惡意代碼返回給客戶端,執行惡意代碼;ajax
基於DOM型:數據庫
攻擊的過程能夠用以下圖來表示:
json
怎麼防護:校驗用戶輸入和校驗Id類型,正則匹配; 在頁面輸出以前先進行轉義,html編碼,javascript編碼;url編碼; cspcanvas
有可能會出現攻擊的幾個點:跨域
&號不該該出如今HTML的大部分節點中瀏覽器
括號<>是不該該出如今標籤內的,除非是引號引入
在ext節點裏面,<左尖括號有很大的危害
引號在標籤內可能有危害,具體危害取決於存在的位置,可是在text節點是沒有危害的。
CSRF(Cross-site Request forgery)跨站請求僞造,他主要作的是,攻擊者盜用你的登陸信息,以你的身份模擬發送各類請求。
CSRF的攻擊圖:
從圖中能夠看出,要完成一次CSRF攻擊,受害者必須完成兩個步驟
登陸受信任網站A,並在本地生成cookie
在不退出A的狀況下,訪問危險網站B。
須要知足這兩個條件,纔會收到CSRF的攻擊,由於你不能保證如下狀況不會發生
你登陸了一個網站後,再也不打開一個tab頁面並訪問另外的網站,特別是如今瀏覽器都是支持多tab的。
關閉本地的瀏覽器後,本地的Cookie不會馬上過時
上圖中的攻擊網站,可能存在一個存在其餘漏洞的可信任的常常被人訪問的網站
如何預防CRSF:
服務端預防: 正確使用GET、POST和Cookie; 在非GET請求中增長僞隨機數; 隨機數的增長主要有三個方式: - 爲每一個用戶生成一個惟一的cookie token,全部表單都包含同一個僞隨機值 - 每一個請求都是用驗證碼,這個方案完美,由於要屢次輸入驗證碼,因此用戶友好性不好,因此不適合實際運用 - 不一樣的表單包含一個不一樣的僞隨機值
3.HTTP劫持:主要是運營商,預防的方法是https
4.DNS劫持
XMLHttpRequest Level 2 (Cross-origin Resource Sharing)
阮一峯的博格
本地存儲: 增長了local storage 和 session storage,使存儲信息從cookie中走出來
web worker(js多線程執行): 由於執行js會阻塞UI,h5實現了web worker這一機制,從而使得js可使用子線程去執行任務,不阻塞UI線程
web secket(服務器推送機制)主要是爲了保持長連接
新標籤和新API,好比<video>,<audio>,<canvas>使得能夠少用第三方插件,減小不可控安全問題
(加強cookie的安全分方法: session cookie設置爲true,建立cookie會被安全的形式向服務器傳輸,也就是在HTTPS鏈接中被瀏覽器傳遞到服務器端進行會話驗證,若是是HTTP鏈接就不會傳遞信息,因此不會被竊取到Cookie的具體內容; HttpOnly屬性,若是設置了HttpOnly屬性,那麼經過腳本將沒法獲取到Cookie信息,這樣能有效的防止XSS攻擊)
由於ajax是嚴格遵照同源策略的,因此誕生了ajax跨域方式的-CORS,就是爲了解決跨域問題;除了這種方法之外,還有兩種其餘方式:jsonp的方式和flash跨域方案
CORS跨域的作法:用Access-Control-Allow-Origin這個頭以及其餘的頭來實現的,客戶端跨域訪問另外一個服務器,服務器會肯定這個域名是否有權限來獲取資源,如有則返回一個帶有Access-Control-Allow-Origin頭的response以及資源,若無則返回一個權限錯誤:XMLHttpRequest;
可是這個作法的風險點
http頭信息能夠僞造,說明頭信息中的域名origin能夠是假的,因此跨域是要配合身份驗證進行的,因此跨域要帶上session id;
就算帶上了session id,但第三方仍是可能會入侵,致使源站信息泄露,因此CORS是個很是危險的東西;
內部信息泄露,內部成員打開了一個evil website, 致使信息泄露,內部網站的數據也將泄露;
設置了Access-Control-Allow-Origin,並對請求點作了請求控制,可是返回權限錯誤的時候,請求信息已經到了客戶端;
CORS默認不攜帶會話信息,可是若是withCredentials設置爲true,就能夠攜帶,因此最好不要設置爲false.萬一設置爲true,請在Access-Control-Allow-Origin上設置具體的域名,不要使用*。
防護姿式:
不要對Access-Control-Allow-Origin設置* 對跨域要驗證session信息 嚴格審查請求信息,好比請求蠶食,還有http頭信息
因此應該怎麼使用: