亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
台前县| 长沙市| 彰武县| 托里县| 香河县| 徐汇区| 广平县| 新化县| 闻喜县| 蛟河市| 巴彦淖尔市| 长春市| 罗甸县| 稻城县| 盱眙县| 仁怀市| 西丰县| 临清市| 芦山县| 天水市| 南岸区| 青海省| 天津市| 彰化市| 彩票| 吉木乃县| 苏尼特右旗| 牙克石市| 大同县| 吉木萨尔县| 白朗县| 聂拉木县| 揭阳市| 航空| 广元市| 中西区| 古交市| 新密市| 肇东市| 米泉市| 靖远县|