這裡有一份簡潔的前端知識體系等待你查收,看看吧,會有驚喜哦~如果覺得不錯,懇求star哈~
課程思維導圖
Q:常見的攻擊方式有哪些?
- CSRF:跨站請求偽造
- XSS:跨站指令碼攻擊
Q:CSRF的原理及防禦措施?
- 攻擊原理:
- F是網站A的使用者,且已登入,網站A對使用者F進行身份認證後下發了cookie,儲存在F瀏覽器中。
- F訪問網站B,網站B存在引誘點選(往往是個連結,指向網站A的API介面,通常是GET型別),然後訪問了A網站,瀏覽器會自動上傳cookie。
- 網站A對傳來的cookie進行確認,是合法使用者,則執行介面的動作
- 前提:
- 網站A某個介面存在漏洞
- 使用者在網站A已登入
- 防禦措施:
- Token驗證:使用者訪問網站時,伺服器會自動向本地儲存token,訪問介面時,需要回傳token,否則無法通過驗證
- Referer驗證:伺服器判斷頁面來源是否為站點下的頁面,如果不是,則攔截
- 隱藏令牌:與token類似,使用方式上的差別,更加隱蔽(比如放在http頭部)
Q:XSS的原理及防禦措施?
- 攻擊原理:向頁面的合法渠道注入指令碼(在指令碼里執行想做的事情,不一定要登入)
- 攻擊方式:
- 反射型:發出請求時,XSS程式碼出現在URL中,作為輸入傳給伺服器,伺服器解析後響應,XSS程式碼隨響應內容傳回瀏覽器,最後瀏覽器執行XSS程式碼,比如插入廣告、執行惡性程式碼(img onerror)、引誘使用者點選(按鈕點選)
- 儲存型:提交的程式碼會儲存在伺服器端(資料庫、記憶體、檔案系統等),下次請求目標頁面時不用再提交XSS程式碼。
- 防禦措施(讓插入的指令碼不可執行)
- 編碼:對使用者輸入的內容進行HTML Entity轉義,例如</ body>,如果不轉義,直接輸出到頁面上時,DOM結構就被破壞了。同時還要避免直接進行HTML Entity解碼,否則,編碼跟過濾就失去了意義。
- 過濾:
- 移除使用者上傳的DOM屬性,如onerror等跟事件相關的屬性
- 移除使用者上傳的Style節點、Script節點、iframe節點、frame節點等
- 校正:使用DOM Parse轉換(類似的第三方庫有domParse),校正不配對的DOM標籤,防止使用者輸入的內容破壞掉我們頁面的DOM結構。