1.CSRF
CSRF(Cross-site request forgery):跨站請求偽造。
2.CSRF的攻擊原理
用戶是網站A的注冊用戶,且登錄進去,於是網站A就給用戶下發cookie。
從上圖可以看出,要完成一次CSRF攻擊,受害者必須滿足兩個必要的條件:
(1)登錄受信任網站A,並在本地生成Cookie。(如果用戶沒有登錄網站A,那么網站B在誘導的時候,請求網站A的api接口時,會提示你登錄)
(2)在不登出A的情況下,訪問危險網站B(其實是利用了網站A的漏洞)。
我們在講CSRF時,一定要把上面的兩點說清楚。
cookie保證了用戶可以處於登錄狀態,但網站B其實拿不到 cookie。
3、CSRF如何防御
方法一、Token 驗證:(用的最多)
(1)服務器發送給客戶端一個token; (2)客戶端提交的表單中帶着這個token。 (3)如果這個 token 不合法,那么服務器拒絕這個請求。
方法二:隱藏令牌:
把 token 隱藏在 http 的 head頭中。
方法二和方法一有點像,本質上沒有太大區別,只是使用方式上有區別。
方法三:Referer 驗證:
Referer 指的是頁面請求來源。意思是,只接受本站的請求,服務器才做響應;如果不是,就攔截。
1、XSS
XSS(Cross Site Scripting):跨域腳本攻擊。
XSS的攻擊原理
XSS攻擊的核心原理是:不需要你做任何的登錄認證,它會通過合法的操作(比如在url中輸入、在評論框中輸入),向你的頁面注入腳本(可能是js、hmtl代碼塊等)。
最后導致的結果可能是:
盜用Cookie破壞頁面的正常結構,插入廣告等惡意內容D-doss攻擊
XSS的攻擊方式
1、反射型
發出請求時,XSS代碼出現在url中,作為輸入提交到服務器端,服務器端解析后響應,XSS代碼隨響應內容一起傳回給瀏覽器,最后瀏覽器解析執行XSS代碼。這個過程像一次反射,所以叫反射型XSS。
2、存儲型存
儲型XSS和反射型XSS的差別在於,提交的代碼會存儲在服務器端(數據庫、內存、文件系統等),下次請求時目標頁面時不用再提交XSS代碼。
XSS的防范措施(encode + 過濾)
XSS的防范措施主要有三個:
1、編碼:
對用戶輸入的數據進行編碼
2、過濾:
移除用戶輸入的和事件相關的屬性
如onerror可以自動觸發攻擊,還有onclick等。(總而言是,過濾掉一些不安全的內容)移除用戶輸入的Style節點、Script節點、Iframe節點。(尤其是Script節點,它可是支持跨域的呀,一定要移除)。
3、校正
避免直接對HTML Entity進行解碼。使用DOM Parse轉換,校正不配對的DOM標簽
CSRF 和 XSS 的區別
區別一:
CSRF:需要用戶先登錄網站A,獲取 cookie。
XSS:不需要登錄。
區別二:(原理的區別)
CSRF:是利用網站A本身的漏洞,去請求網站A的api。
XSS:是向網站 A 注入 JS代碼,然后執行 JS 里的代碼,篡改網站A的內容。