JSP使用過濾器防止Xss漏洞

2022-09-26 20:30:17 字數 2407 閱讀 4588

在用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 ...