一、背景
最近所從事的專案,線上被掃瞄出部分連線存在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....