Spring Boot XSS 攻擊過濾外掛使用

XSS 是什麼

XSS(Cross Site Scripting)攻擊全稱跨站指令碼攻擊,為了不與 CSS(Cascading Style Sheets)名詞混淆,故將跨站指令碼攻擊簡稱為 XSS,XSS 是一種常見 web 安全漏洞,它允許惡意程式碼植入到提供給其它使用者使用的頁面中。

xss 攻擊流程

Spring Boot XSS 攻擊過濾外掛使用

簡單 xss 攻擊示例

若網站某個表單沒做相關的處理,使用者提交相關惡意程式碼,瀏覽器會執行相關的程式碼。

Spring Boot XSS 攻擊過濾外掛使用

解決方案

XSS 過濾說明

對錶單繫結的字串型別進行 xss 處理。

對 json 字串資料進行 xss 處理。

提供路由和控制器方法級別的放行規則。

使用 mica-xss

引入一下 依賴即可

<!——XSS 安全過濾——> net。dreamlu mica-core 2。0。9-GA net。dreamlu mica-xss 2。0。9-GA

測試 XSS 過濾

測試 GET 引數過濾

建立目標介面,模擬 get 提交

@GetMapping(“/xss”)public String xss(String params){ return params;}

返回為空

⋊> ~ curl ——location ——request GET ‘http://localhost:8080/xss?params=%3Cscript%3Ealert(%27xxx%27)%3C/script%3E’

測試 POST form 引數過濾

建立目標介面,模擬 post form 提交

@PostMapping(“/xss”)public String xss(String params){ return params;}

返回為空

curl ——location ——request POST ‘http://localhost:8080/xss’ \——header ‘Content-Type: application/x-www-form-urlencoded’ \——data-urlencode ‘params=

測試 POST body 引數過濾

建立目標介面,模擬 post body 提交

@PostMapping(“/xss”) public String xss(@RequestBody Map body){ return body。get(“params”); }

返回為空

curl ——location ——request POST ‘http://localhost:8080/xss’ \——header ‘Content-Type: application/json’ \——data-raw ‘{ “params”:“”}’

跳過某些介面過濾

可以使用

@XssCleanIgnore

註解對方法和類級別進行忽略。

@XssCleanIgnore@PostMapping(“/xss”)public String xss(@RequestBody Map body){ return body。get(“params”);}

原理分析

常見實現剖析

目前網上大多數的方案如下圖,新增 XssFilter 攔截使用者提交的引數,進行相關的轉義和黑名單排除,完成相關的業務邏輯。

在整個過程中最核心的是透過包裝使用者的原始請求,建立新的 requestwrapper 保證請求流在後邊的流程可以重複讀

Spring Boot XSS 攻擊過濾外掛使用

mica-xss 實現

1。 自定義 WebDataBinder 編輯器支援 form 過濾

Spring WebDataBinder 的作用是從 web request 中把 web 請求裡的

parameters

繫結到對應的

JavaBean

上,在 Controller 方法中的引數型別可以是基本型別,也可以是封裝後的普通 Java 型別。若這個普通的 Java 型別沒有宣告任何註解,則意味著它的每一個屬性都需要到 Request 中去查詢對應的請求引數,而 WebDataBinder 則可以幫助我們實現從 Request 中取出請求引數並繫結到 JavaBean 中。

SpringMVC 在繫結的過程中提供了使用者自定義編輯繫結的介面,注入即可在引數繫結 JavaBean 過程中執行過濾。

Spring Boot XSS 攻擊過濾外掛使用

2。 自定義 JsonDeserializer 反序列化支援 Json 過濾

在 Spring Boot 中預設是使用 Jackson 進行序列化和反序列化 JSON 資料的,那麼除了可以用預設的之外,我們也可以編寫自己的 JsonSerializer 和 JsonDeserializer 類,來進行自定義操作。使用者提交 JSON 報文會透過 Jackson 的 JsonDeserializer 繫結到 JavaBean 中。我們只需要自定義 JsonDeserializer 即可完成在繫結 JavaBean 中執行過濾。

Spring Boot XSS 攻擊過濾外掛使用

核心過濾邏輯

在 mica-xss 中並未採取上文所述透過自己手寫黑名單或者轉義方式的實現方案,而是直接實現 Jsoup 這個工具類。

jsoup 實現 WHATWG HTML5 規範,並將 HTML 解析為與現代瀏覽器相同的 DOM。

從 URL,檔案或字串中刮取和解析 HTML

使用 DOM 遍歷或 CSS 選擇器查詢和提取資料

操縱 HTML 元素,屬性和文字

清除使用者提交的內容以防止安全白名單,以防止 XSS 攻擊

輸出整潔的 HTML

Spring Boot XSS 攻擊過濾外掛使用