中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

JSP如何寫過濾器防止xss攻擊

小新
335
2021-01-14 13:32:43
欄目: 網絡安全

JSP如何寫過濾器防止xss攻擊

JSP寫過濾器防止xss攻擊的方法:

利用Servlet的過濾器機制,編寫定制的XssFilter,將request請求代理,覆蓋getParameter和getHeader方法將參數名和參數值里的指定半角字符,強制替換成全角字符,代碼如下:

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


package filter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

  

public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {

 HttpServletRequest orgRequest = null;

  

 public XssHttpServletRequestWrapper(HttpServletRequest request) {

 super(request);

 orgRequest = request;

 }

  

 /**

 * 覆蓋getParameter方法,將參數名和參數值都做xss過濾。<br/>

 * 如果需要獲得原始的值,則通過super.getParameterValues(name)來獲取<br/>

 * getParameterNames,getParameterValues和getParameterMap也可能需要覆蓋

 */

 @Override

 public String getParameter(String name) {

 String value = super.getParameter(xssEncode(name));

 if (value != null) {

 value = xssEncode(value);

 }

 return value;

}

  

/**

 * 覆蓋getHeader方法,將參數名和參數值都做xss過濾。<br/>

 * 如果需要獲得原始的值,則通過super.getHeaders(name)來獲取<br/>

 * getHeaderNames 也可能需要覆蓋

*/

 @Override

 public String getHeader(String name) {

  

 String value = super.getHeader(xssEncode(name));

 if (value != null) {

 value = xssEncode(value);

 }

 return value;

}

  

/**

 * 將容易引起xss漏洞的半角字符直接替換成全角字符

 *

 * @param s

 * @return

*/

private static String xssEncode(String s) {

if (s == null || s.isEmpty()) {

return s;

}

 StringBuilder sb = new StringBuilder(s.length() + 16);

 for (int i = 0; i < s.length(); i++) {

 char c = s.charAt(i);

 switch (c) {

 case '>':

 sb.append('>');//全角大于號

 break;

 case '<':

 sb.append('<');//全角小于號

 break;

 case '\'':

 sb.append('‘');//全角單引號

 break;

 case '\"':

 sb.append('“');//全角雙引號

 break;

 case '&':

 sb.append('&');//全角

 break;

 case '\\':

 sb.append('\');//全角斜線

 break;

 case '#':

 sb.append('#');//全角井號

 break;

 default:

 sb.append(c);

 break;

 }

}

 return sb.toString();

}

  

/**

* 獲取最原始的request

*

* @return

*/

public HttpServletRequest getOrgRequest() {

return orgRequest;

}

/**

* 獲取最原始的request的靜態方法

*

* @return

*/

 public static HttpServletRequest getOrgRequest(HttpServletRequest req) {

 if(req instanceof XssHttpServletRequestWrapper){

 return ((XssHttpServletRequestWrapper)req).getOrgRequest();

}

  

return req;

}

}

</pre>

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


0
吐鲁番市| 平远县| 英德市| 宁武县| 大洼县| 永靖县| 海南省| 内乡县| 新巴尔虎右旗| 神木县| 义马市| 咸丰县| 额敏县| 和田市| 托克逊县| 淮南市| 扎兰屯市| 饶河县| 水城县| 曲沃县| 乌兰县| 镇宁| 石楼县| 玛沁县| 汉川市| 衡南县| 吉首市| 玛纳斯县| 嵊泗县| 常山县| 鲁山县| 蒙自县| 永年县| 宜章县| 增城市| 濮阳县| 涞水县| 揭东县| 鄂托克前旗| 福海县| 梓潼县|