XSS(Cross Site Scripting)攻擊全稱跨站腳本攻擊,爲了避免與 CSS(Cascading Style Sheets)名詞混淆,故將跨站腳本攻擊簡稱爲 XSS,XSS 是一種常見 web 安全漏洞,它容許惡意代碼植入到提供給其它用戶使用的頁面中。java
引入一下 依賴便可git
<!--XSS 安全過濾--> <dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-core</artifactId> <version>2.0.9-GA</version> </dependency> <dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-xss</artifactId> <version>2.0.9-GA</version> </dependency>
@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'
@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=<script>alert('\''xxx'\'')</script>'
@PostMapping("/xss") public String xss(@RequestBody Map<String,String> body){ return body.get("params"); }
curl --location --request POST 'http://localhost:8080/xss' \ --header 'Content-Type: application/json' \ --data-raw '{ "params":"<script>alert('\''XXX'\'')</script>" }'
能夠使用 @XssCleanIgnore 註解對方法和類級別進行忽略。web
@XssCleanIgnore @PostMapping("/xss") public String xss(@RequestBody Map<String,String> body){ return body.get("params"); }
目前網上大多數的方案以下圖,新增 XssFilter 攔截用戶提交的參數,進行相關的轉義和黑名單排除,完成相關的業務邏輯。在整個過程當中最核心的是經過包裝用戶的原始請求,建立新的 requestwrapper 保證請求流在後邊的流程能夠重複讀。shell
Spring WebDataBinder 的做用是從 web request 中把 web 請求裏的parameters
綁定到對應的JavaBean
上,在 Controller 方法中的參數類型能夠是基本類型,也能夠是封裝後的普通 Java 類型。若這個普通的 Java 類型沒有聲明任何註解,則意味着它的每個屬性都須要到 Request 中去查找對應的請求參數,而 WebDataBinder 則能夠幫助咱們實現從 Request 中取出請求參數並綁定到 JavaBean 中。json
SpringMVC 在綁定的過程當中提供了用戶自定義編輯綁定的接口,注入便可在參數綁定 JavaBean 過程當中執行過濾。瀏覽器
在 Spring Boot 中默認是使用 Jackson 進行序列化和反序列化 JSON 數據的,那麼除了能夠用默認的以外,咱們也能夠編寫本身的 JsonSerializer 和 JsonDeserializer 類,來進行自定義操做。用戶提交 JSON 報文會經過 Jackson 的 JsonDeserializer 綁定到 JavaBean 中。咱們只須要自定義 JsonDeserializer 便可完成在綁定 JavaBean 中執行過濾。安全
在 mica-xss 中並未採起上文所述經過本身手寫黑名單或者轉義方式的實現方案,而是直接實現 Jsoup 這個工具類。app
jsoup 實現 WHATWG HTML5 規範,並將 HTML 解析爲與現代瀏覽器相同的 DOM。curl
項目推薦: Spring Cloud 、Spring Security OAuth2的RBAC權限管理系統 歡迎關注xss