❶ 【快學springboot】15、SpringBoot過濾XSS腳本攻擊
XSS攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS,XSS是一種在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。
簡而言之,就是作惡用戶通過表單提交一些前端代碼,如果不做處理的話,這些前端代碼將會在展示的時候被瀏覽器執行。
解決XSS攻擊,可以通過後端對輸入的數據做過濾或者轉義,使XSS攻擊代碼失效。
對於過濾XSS腳本的代碼,通過搜索引擎可以搜索到很多,但似乎都不是那麼全面。基本上都是只能過濾querystring(表單類型)類型的入參,而不能過濾json類型的入參。其實,在現在的開發中,更多的是使用json類型做數據交互。下面就直接貼代碼了:
這里重寫了兩個方法:getParameter和getParameterValues,getParameter方法是直接通過request獲得querystring類型的入參調用的方法。如果是通過springMVC註解類型來獲得參數的話,走的是getParameterValues的方法。大家可以通過列印一個輸出來驗證一下。
StringEscapeUtils.escapeHtml4這個方法來自Apache的工具類,maven坐標如下:
過濾的代碼寫完了,下面就是在一個filter中應用該代碼。
過濾表單類型的代碼已經完成(xssObjectMapper這個是後面過濾json類型才用到的)。下面來實現過濾json類型的代碼:
代碼如下:
這里是通過修改SpringMVC的json序列化來達到過濾xss的目的的。其實也可以通過第一種方法,重寫getInputStream方法來實現,這里我就不做演示了(通過json類型傳參會走getInputStream方法,通過重寫該方法列印輸出可以證明)。
TestController.java
下面通過postman測試下效果:
可以看到,js代碼已經經過轉義。轉義過後的代碼,即使前端讀取過去了,也不會被瀏覽器執行的。