在用java進(jìn)行web業(yè)務(wù)開(kāi)發(fā)的時(shí)候,對于頁(yè)面上接收到的參數,除了極少數是步可預知的內容外,大量的參數名和參數值都是不會(huì )出現觸發(fā)Xss漏洞的字符。而通常為了避免Xss漏洞,都是開(kāi)發(fā)人員各自在頁(yè)面輸出和數據入庫等地方加上各種各樣的encode方法來(lái)避免Xss問(wèn)題。而由于開(kāi)發(fā)人員的水平不一,加上在編寫(xiě)代碼的過(guò)程中安全意識的差異,可能會(huì )粗心漏掉對用戶(hù)輸入內容進(jìn)行encode處理。針對這種大量參數是不可能出現引起Xss和SQL注入漏洞的業(yè)務(wù)場(chǎng)景下,因此可以使用一個(gè)適用大多數業(yè)務(wù)場(chǎng)景的通用處理方法,犧牲少量用戶(hù)體驗,來(lái)避免Xss漏洞和SQL注入。
那就是利用Servlet的過(guò)濾器機制,編寫(xiě)定制的XssFilter,將request請求代理,覆蓋getParameter和getHeader方法將參數名和參數值里的指定半角字符,強制替換成全角字符。使得在業(yè)務(wù)層的處理時(shí)不用擔心會(huì )有異常輸入內容。
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>
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。