第一章 客戶端安全
2.1 同源策略
限制不同的document指令碼對當前的document讀取或者設定某些屬性
埠,協議或者域名之一有一個不一樣就會產生跨域問題
2.2 瀏覽器沙箱
瀏覽器利用沙箱技術,可以讓不受網頁信任的程式碼,JavaScript程式碼執行在一個收到限制的環境中,從而保護本地的桌面系統安全。
瀏覽器的多程式架構,將瀏覽器的各個功能分開,當一個程式崩潰時,也不會影響到其他的程式。谷歌是第一個引入瀏覽器多程式架構的瀏覽器,主要分為瀏覽器程式、渲染程式、外掛程式以及擴充套件程式。
2.3 惡意網址攔截
原理:瀏覽器週期性地從伺服器獲取一份最新的惡意網址名單。
惡意網站: ①掛馬網站:利用瀏覽器的漏洞執行惡意JavaScript程式碼 ②釣魚網站:模仿知名網站來欺騙使用者
攔截:谷歌黑名單庫,EVSSL證照
第二章 跨站指令碼攻擊
3.1 XSS簡介
指的是黑客用過HTML注入篡改網站,插入了惡意指令碼,從而在使用者瀏覽時控制使用者的許可權。
型別: 1、反射型XSS:簡單地把使用者輸入的資料“反射”給使用者,往往誘使使用者點選才會成功。也成為非永續性XSS攻擊 2、儲存型XSS:把使用者的資料儲存在服務端。也稱為永續性XSS。比如黑客發表一篇含有惡意程式碼的文章,使用者閱讀後把惡意指令碼儲存在服務端。 3、DOM Based XSS:並非按照資料是否儲存在服務端劃分的,效果上來說是反射型的XSS。單獨劃分來說,比如構造一個事件,閉合原始碼的’且插入自己的JavaScript程式碼。第二個就是會閉合掉a然後使得觸發另外的函式。
3.2 XSS攻擊進階
-
XSS Playload:攻擊者攻擊成功之後就會執行它的惡意程式碼,XSS Playload就是JavaScript程式碼。比如他會讀取你的瀏覽器cookie物件,這也稱為cookie劫持。可以通過HttpOnly標識防止cookie劫持
-
構造GET請求和POST請求可能導致使用者刪除重要資料和文章。還可以利用這個來獲取使用者的賬戶密碼等資訊。
-
非法獲取使用者的IP地址。因為很多時候使用者的電腦都是使用了代理伺服器,網站看到的IP地址其實是內網的出口IP地址。
3.3 XSS防禦
- HttpOnly:主要是為了解決XSS攻擊後的cookie劫持攻擊。
step1 :瀏覽器向伺服器傳送請求,這時候是沒有cookie的 step2 :伺服器返回set-Cookie頭,向客戶端瀏覽器寫入Cookie step3 :在該Cookie到期之前,瀏覽器訪問該域下的所有頁面都應該傳送Cookie
- 處理富文字:在標籤選擇上儘量選擇白名單,避免使用黑名單
第四章 跨站請求偽造
攻擊者在自己的域內偽造一個頁面,比如刪除某個部落格的文章。然後誘使使用者訪問一個頁面,就以該使用者身份在第三方站點執行一次操作。 ####CSRF防禦
- 驗證碼:CSRF攻擊通常是使用者在不知情的情況之下構造了網路請求,而驗證碼是使用者必須與應用進行互動才能完成最終請求。
- Referer Check :用於檢查請求是否來自於合法的"源"。比如使用者需要發帖就會登陸到後臺,那麼Referer這個值必然是發帖表單所在的頁面。但是有一個缺陷,伺服器並非什麼時候都會去得到Referer。
- Token:Token 需要同時放在表單中和session中,提交表但時,伺服器要驗證表單中的Token是否與使用者session或者(cookie)中的Token是否一致。
- token一定要足夠隨機
第五章 點選劫持
5.1 點選劫持
點選劫持其實就是利用視覺上的欺騙手段。攻擊者使用一個不透明、不可見的iframe覆蓋在網頁上,
5.2 拖拽劫持和資料竊取
誘使使用者從不可見的iframe中拖拽出攻擊者希望得到的資料。
5.3 觸屏劫持
- touchstart
- touchend
- touchmove
- touchcancel
5.4 防禦ClickJacking
-
frame busting 寫一段JavaScript程式碼防止iframe巢狀
-
X-Frame-Options 使用一個HTTP請求頭,當值位DENY時瀏覽器拒絕載入當前頁面任何frame頁面;若值為sameorigin時允許載入同源頁面下的頁面;當值為allow-from origin時就允許載入頁面的地址
第六章 HTML5安全
6.1 HTML5新標籤
使用HTML5新增的標籤,比如說video等用於遠端載入資源的標籤會存在XSS漏洞。
- iframe的sandbox 為了限制iframe的指令碼,為iframe定義了一個sandbox屬性,將iframe所載入的內容視為一個獨立的"源",其中的指令碼被限制執行,表單被限制提交,外掛被禁止載入。
- postMessage----跨視窗傳遞資訊 允許每一個window物件往其他的擦視窗傳送文字資訊,從而實現跨視窗訊息傳遞,這個功能是不受同源策略限制。
第七章 注入攻擊
7.1 SQL隱碼攻擊
注入的本質就是把使用者輸入的資料當成程式碼執行。原來程式要執行的資料拼接了使用者輸入的資料。
第八章 認證與會話管理
- 認證的目的就是為了認出使用者是誰,授權就是為了決定使用者能夠做什麼。
- 認證實際上就是一個驗證憑證的過程。
- 單點登陸,使用者登陸一次就可以訪問所有的系統。
- OpenID是一個開放的單點登陸系統,用的是URI作為使用者在網際網路上面的標識,然後網站重定向到openID的提供者認證,認證完成後再重定向回網站。
- web應用中,使用者登陸後,伺服器會返回一個sessionID加密寫在瀏覽器的cookie上。