在用java進行web業(yè)務開發(fā)的時候,對于頁面上接收到的參數,除了極少數是步可預知的內容外,大量的參數名和參數值都是不會出現觸發(fā)Xss漏洞的字符。而通常為了避免Xss漏洞,都是開發(fā)人員各自在頁面輸出和數據入庫等地方加上各種各樣的encode方法來避免Xss問題。而由于開發(fā)人員的水平不一,加上在編寫代碼的過程中安全意識的差異,可能會粗心漏掉對用戶輸入內容進行encode處理。針對這種大量參數是不可能出現引起Xss和SQL注入漏洞的業(yè)務場景下,因此可以使用一個適用大多數業(yè)務場景的通用處理方法,犧牲少量用戶體驗,來避免Xss漏洞和SQL注入。
那就是利用Servlet的過濾器機制,編寫定制的XssFilter,將request請求代理,覆蓋getParameter和getHeader方法將參數名和參數值里的指定半角字符,強制替換成全角字符。使得在業(yè)務層的處理時不用擔心會有異常輸入內容。
XssFilter.java
- package filter;
-
- import java.io.IOException;
-
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
-
- public class XssFilter implements Filter {
-
- public void init(FilterConfig config) throws ServletException {
- }
-
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException
- {
- XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper(
- (HttpServletRequest) request);
- chain.doFilter(xssRequest, response);
- }
-
- public void destroy() {
- }
- }
XssHttpServletRequestWrapper.java
在web.xml中添加
- <filter>
- <filter-name>xssFilter</filter-name>
- <filter-class>filter.XssFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>xssFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請
點擊舉報。