xss攻擊和csrf攻擊的定義及差別
- ==CSRF==
-
- ==1.CSRF的基本概念、縮寫、全稱==
- ==2.CSRF的攻擊原理==
- ==3、CSRF如何防禦==
- ==XSS==
-
- ==1、XSS的基本概念==
- ==XSS的攻擊原理==
- ==XSS的攻擊方式==
- ==XSS的防範措施主要有三個:==
- ==CSRF 和 XSS 的差別==
轉載自:https://www.cnblogs.com/itsuibi/p/10752868.html
CSRF
1.CSRF的基本概念、縮寫、全稱
CSRF(Cross-site request forgery):跨站請求僞造。
PS:中文名一定要記住。英文全稱,如果記不住也拉倒。
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 指的是頁面請求來源。意思是,隻接受本站的請求,伺服器才做響應;如果不是,就攔截。
XSS
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、編碼:
對使用者輸入的資料進行
HTML Entity 編碼。
如上圖所示,把字元轉換成 轉義字元。
Encode的作用是将$var等一些字元進行轉化,使得浏覽器在最終輸出結果上是一樣的。
比如說這段代碼:
<script>alert(1)</script>
若不進行任何處理,則浏覽器會執行alert的js操作,實作XSS注入。
進行編碼處理之後,L在浏覽器中的顯示結果就是
<script>alert(1)</script>
,實作了将$var作為純文字進行輸出,且不引起JavaScript的執行。
2、過濾:
移除使用者輸入的和事件相關的屬性。如onerror可以自動觸發攻擊,還有onclick等。(總而言是,過濾掉一些不安全的内容)移除使用者輸入的Style節點、Script節點、Iframe節點。(尤其是Script節點,它可是支援跨域的呀,一定要移除)。
3、校正
避免直接對HTML Entity進行解碼。使用DOM Parse轉換,校正不配對的DOM标簽。備注:我們應該去了解一下
DOM Parse
這個概念,它的作用是把文本解析成DOM結構。
比較常用的做法是,通過第一步的編碼轉成文本,然後第三步轉成DOM對象,然後經過第二步的過濾。
還有一種簡潔的答案:
首先是encode,如果是富文本,就白名單。
CSRF 和 XSS 的差別
差別一:
CSRF:需要使用者先登入網站A,擷取 cookie。XSS:不需要登入。
差別二:(原理的差別)
CSRF:是利用網站A本身的漏洞,去請求網站A的api。XSS:是向網站 A 注入 JS代碼,然後執行 JS 裡的代碼,篡改網站A的内容。