91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
沧州市| 镇平县| 商南县| 石家庄市| 法库县| 玉屏| 武穴市| 庆安县| 穆棱市| 罗平县| 康马县| 霍邱县| 社旗县| 南充市| 黄平县| 格尔木市| 金塔县| 富宁县| 江孜县| 安康市| 容城县| 济南市| 共和县| 芦山县| 晋江市| 鄄城县| 邯郸市| 台中市| 武宣县| 海城市| 东丽区| 陆丰市| 玉环县| 佛冈县| 晋州市| 区。| 新建县| 阿拉善左旗| 龙南县| 卓资县| 剑河县|