1. 程式人生 > >web安全之CSRF與XSS

web安全之CSRF與XSS

CSRF

1、CSRF的基本概念、縮寫、全稱

CSRF(Cross-site request forgery):跨站請求偽造。

PS:中文名一定要記住。英文全稱,如果記不住也拉倒。

2、CSRF的攻擊原理

開啟百度App,看更多美圖

使用者是網站A的註冊使用者,且登入進去,於是網站A就給使用者下發cookie。

從上圖可以看出,要完成一次CSRF攻擊,受害者必須滿足兩個必要的條件:

(1)登入受信任網站A,並在本地生成Cookie。(如果使用者沒有登入網站A,那麼網站B在誘導的時候,請求網站A的api介面時,會提示你登入)

(2)在不登出A的情況下,訪問危險網站B(其實是利用了網站A的漏洞)。

我們在講CSRF時,一定要把上面的兩點說清楚。

溫馨提示一下,cookie保證了使用者可以處於登入狀態,但網站B其實拿不到 cookie。

舉個例子,前端事假你,微博網站有個api介面有漏洞,導致很多使用者的粉絲暴增。

3、CSRF如何防禦

方法一、Token 驗證:(用的最多)

(1)伺服器傳送給客戶端一個token;

(2)客戶端提交的表單中帶著這個token。

(3)如果這個 token 不合法,那麼伺服器拒絕這個請求。

方法二:隱藏令牌:

把 token 隱藏在 http 的 head頭中。

方法二和方法一有點像,本質上沒有太大區別,只是使用方式上有區別。

方法三、Referer 驗證:

Referer 指的是頁面請求來源。意思是,只接受本站的請求,伺服器才做響應;如果不是,就攔截。

XSS

1、XSS的基本概念

XSS(Cross Site Scripting):跨域指令碼攻擊。

接下來,我們詳細講一下 XSS 的內容。

預備知識:HTTP、Cookie、Ajax。

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的內容。