在用j**a進行web業務開發的時候,對於頁面上接收到的引數,除了極少數是步可預知的內容外,大量的引數名和引數值都是不會出現觸發xss漏洞的字元。而通常為了避免xss漏洞,都是開發人員各自在頁面輸出和資料入庫等地方加上各種各樣的encode方法來避免xss問題。而由於開發人員的水平不一,加上在編寫**的過程中安全意識的差異,可能會粗心漏掉對使用者輸入內容進行encode處理。針對這種大量引數是不可能出現引起xss和sql注入漏洞的業務場景下,因此可以使用乙個適用大多數業務場景的通用處理方法,犧牲少量使用者體驗,來避免xss漏洞和sql注入。
那就是利用servlet的過濾器機制,編寫定製的xssfilter,將request請求**,覆蓋getparameter和getheader方法將引數名和引數值裡的指定半形字元,強制替換成全形字符。使得在業務層的處理時不用擔心會有異常輸入內容。
import j**ax.servlet.http.httpservletrequ程式設計客棧est;
/*** 覆蓋getparameter方法,將引數名和引數值都做xss過濾。
* 如果需要獲得原始的值,則通過super.getparametervalues(name)來獲取
* getparameternames,getparametervalues和getparametermap也可能需要覆蓋
*/ @override
public string getparameter(string name)
return value;}
/** * 覆蓋getheader方法,將引數名和引數值都做xss過濾。
* 如果需要獲得原始的值,則通過super.getheaders(name)來獲取
* getheadernames 也可能需要覆蓋
*/ @override
public string getheader(string name)
return value;}
/** * 將容易引起xss漏洞的半形字元直接替換成全形字符
* * @param s
* @return
*/private static string xssencode(string s)
stringbuilder sb = new stringbuilder(s.length() + 16);
for (int i = 0; i < s.length(); i++)
} return sb.tostring();}
/*** 獲取最原始的request
/*** 獲取最原始的request的靜態方法
}}在web.xml中新增
xssfilter
filter.xssfilter
程式設計客棧er>
xssfilter
/*本文標題: jsp使用過濾器防止xss漏洞
本文位址:
使用過濾器
過濾器在資料從作用域傳遞到指令上時進行轉換,但並不改變源資料,這允許在檢視中顯示時能夠靈活地格式化或者轉換資料。angularjs具有兩種型別的內建過濾器 一類是對單個資料進行操作的,另一類是對資料集合進行操作的。用於單個資料的內建過濾器 currency 對貨幣值進行格式化,在過濾器名之後新增冒號...
常用過濾器
去除空格 type 1 所有空格 2 前後空格 3 前空格 4 後空格 function trim value,trim 任意格式日期處理 使用格式 等 function formadate value,fmt if y test fmt fmt fmt.replace regexp.1 date....
XSS漏洞修復 過濾器 親測可用
覆蓋getparameter方法,將引數名和引數值都做xss過濾。如果需要獲得原始的值,則通過super.getparametervalues name 來獲取 getparameternames,getparametervalues和getparametermap也可能需要覆蓋 override ...