徹底解決Spring MVC XSS注入問題

2021-08-13 03:57:03 字數 2418 閱讀 3118

一、背景

最近所從事的專案,線上被掃瞄出部分連線存在xss注入問題。例如:

上面連線中的 alert(1)指令碼被執行。存在xss漏洞。接下來開始解決,經過乙個曲折的過程終於找到乙個最佳方法。

二、可能的方案

1) 在每個controller入口的業務**處手動進行過濾,如:

public

@xsscheck

}這種方法最直接,但也最低階、最繁瑣,每個入口都必須加乙個過濾。 

包裝request->建立過濾器->新增過濾器

public

string getparametervalues(string name) 方法,在此方法中對各個引數值進行xss過濾(spring mvc 部分解析是呼叫的此方法)

但這種方法有個缺點:只能過濾get請求,對於post請求無能為力。對於post請求,則還需要對 request.getinputstream的內容進行過濾(比較麻煩)。

筆者沒有採用這種方式,繼續尋找更優方案。。。

3)在spring mvc流程中解決,能過自定義實現handlermethodargumentresolver介面來自定**析請求引數,在解析時做xss過濾。

這種方法的話,解析過程比較繁瑣、複雜,要考慮各種各樣的客戶端請求格式如json,form,xml等等。而且spring mvc本身已經有非常完備的各種解析實現了。

為了乙個xss過濾又重新寫一套,得不嘗失。

筆者翻遍了spring mvc的**,也嘗試過各種擴充套件,都不太理想。。。最後終於想到乙個改動非常小,且可行辦法。

三、可行的方案

主要思路是:在spring mvc呼叫controller前,通過動態**和反射機制對controller的呼叫進行攔截,並在擋截中對mehtod引數的值進行xss過濾替換。

到這裡,可能有人想說,spring mvc本身就支援controller攔截,即實現handlerinterceptoradapter介面。這種方法不可行,此介面無法實現對請求引數的修改。

話不多說,上**(筆者基於spring 3.2.4版本)。

/*** 為controller bean建立乙個**例項,以便用於 實現呼叫真實controller bean前的切面攔截

* 用以過濾方法引數中可能的xss注入

//本擴充套件僅處理@controller註解的bean }

}

springmvc

contextconfiglocation

classpath:spring-config-servlet.xml

1

徹底解決 OBJC CLASS

最近在使用靜態庫時,總是出現這個問題。下面總結一下我得解決方法 1.m檔案沒有匯入 在build phases裡的compile sources 中新增報錯的檔案 2.framework檔案沒有匯入 靜態庫編譯時往往需要一些庫的支援,檢視你是否有沒有匯入的庫檔案 同樣是在build phases裡的...

徹底解決INSTALL FAILED UPDATE

按ctrl c退出系統,利用adb pull data system packages.xml命令將packages.xml放到你pc機本地,然後找到你需要的包名,刪除到的一段資料。例如 儲存packages.xml,然後adb push packages.xml data system將packa...

徹底解決 OBJC CLASS

1.m檔案沒有匯入 在build phases裡的compile sources 中新增報錯的檔案 2.framework檔案沒有匯入 靜態庫編譯時往往需要一些庫的支援,檢視你是否有沒有匯入的庫檔案 同樣是在build phases裡的link binary with libraries中新增 3....