程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java 過濾器filter防sql注入的完成代碼

java 過濾器filter防sql注入的完成代碼

編輯:關於JAVA

java 過濾器filter防sql注入的完成代碼。本站提示廣大學習愛好者:(java 過濾器filter防sql注入的完成代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是java 過濾器filter防sql注入的完成代碼正文


實例以下:

XSSFilter.java

public void doFilter(ServletRequest servletrequest,
			ServletResponse servletresponse, FilterChain filterchain)
			throws IOException, ServletException {
		

		//flag = true 只做URL驗證; flag = false 做一切字段的驗證;
		boolean flag = true;
		if(flag){
			//只對URL做xss校驗
			HttpServletRequest httpServletRequest = (HttpServletRequest) servletrequest;
			HttpServletResponse httpServletResponse = (HttpServletResponse) servletresponse;
			
			String requesturi = httpServletRequest.getRequestURL().toString();
			requesturi = URLDecoder.decode(requesturi, "UTF-8");
			if(requesturi!=null&&requesturi.indexOf("alipay_hotel_book_return.html")!=-1){
				filterchain.doFilter(servletrequest, servletresponse);
				return;
			}
			if(requesturi!=null&&requesturi.indexOf("account_bank_return.html")!=-1){
				filterchain.doFilter(servletrequest, servletresponse);
				return;
			}
			if(requesturi!=null&&requesturi.indexOf("/alipay/activity.html")!=-1){
				filterchain.doFilter(servletrequest, servletresponse);
				return ;
			}
			if(requesturi!=null&&requesturi.indexOf("/alipayLogin.html")!=-1){
				filterchain.doFilter(servletrequest, servletresponse);
				return ;
			}
			RequestWrapper rw = new RequestWrapper(httpServletRequest);
			String param = httpServletRequest.getQueryString();
			if(!"".equals(param) && param != null) {
				param = URLDecoder.decode(param, "UTF-8");
				String originalurl = requesturi + param;
				
				String sqlParam = param;
				//添加sql注入的斷定
				if(requesturi.endsWith("/askQuestion.html") || requesturi.endsWith("/member/answer.html")){
					sqlParam = rw.cleanSQLInject(param);
				}
				
				String xssParam = rw.cleanXSS(sqlParam);
				requesturi += "?"+xssParam;
				
				
				if(!xssParam.equals(param)){
					System.out.println("requesturi::::::"+requesturi);
					httpServletResponse.sendRedirect(requesturi);
					System.out.println("no entered.");
//					filterchain.doFilter(new RequestWrapper((HttpServletRequest) servletrequest), servletresponse);
					return ;
				}
			}
			filterchain.doFilter(servletrequest, servletresponse);
		}else{
			
			//對要求中的一切器械都做校驗,包含表單。此功效校驗比擬嚴厲輕易屏障表單正常輸出,應用此功效請留意。
			filterchain.doFilter(new RequestWrapper((HttpServletRequest) servletrequest), servletresponse);
		}
	}
requestMapping: 


public RequestWrapper(){
		super(null);
	}

	public RequestWrapper(HttpServletRequest httpservletrequest) {
		super(httpservletrequest);
	}

	public String[] getParameterValues(String s) {
		String str[] = super.getParameterValues(s);
		if (str == null) {
			return null;
		}
		int i = str.length;
		String as1[] = new String[i];
		for (int j = 0; j < i; j++) {
			as1[j] = cleanXSS(cleanSQLInject(str[j]));
		}

		return as1;
	}

	public String getParameter(String s) {
		String s1 = super.getParameter(s);
		if (s1 == null) {
			return null;
		} else {
			return cleanXSS(cleanSQLInject(s1));
		}
	}

	public String getHeader(String s) {
		String s1 = super.getHeader(s);
		if (s1 == null) {
			return null;
		} else {
			return cleanXSS(cleanSQLInject(s1));
		}
	}

	public String cleanXSS(String src) {
		String temp =src;

		System.out.println("xss---temp-->"+src);
    src = src.replaceAll("<", "<").replaceAll(">", ">");
    // if (src.indexOf("address")==-1)
	//	{
     src = src.replaceAll("\\(", "(").replaceAll("\\)", ")");
		//}
   
    src = src.replaceAll("'", "'");
    
    Pattern pattern=Pattern.compile("(eval\\((.*)\\)|script)",Pattern.CASE_INSENSITIVE);  
	  Matcher matcher=pattern.matcher(src);  
	  src = matcher.replaceAll("");

	  pattern=Pattern.compile("[\\\"\\'][\\s]*javascript:(.*)[\\\"\\']",Pattern.CASE_INSENSITIVE); 
	  matcher=pattern.matcher(src);
	  src = matcher.replaceAll("\"\"");
	  
	  //增長劇本 
	  src = src.replaceAll("script", "").replaceAll(";", "")
	  	.replaceAll("\"", "").replaceAll("@", "")
	  	.replaceAll("0x0d", "")
	  	.replaceAll("0x0a", "").replaceAll(",", "");

		if(!temp.equals(src)){
			System.out.println("輸出信息存在xss進擊!");
			System.out.println("原始輸出信息-->"+temp);
			System.out.println("處置後信息-->"+src);
		}
		return src;
	}
	
	//須要增長通配,過濾年夜小寫組合
	public String cleanSQLInject(String src) {
		String temp =src;
    src = src.replaceAll("insert", "forbidI")
    	.replaceAll("select", "forbidS")
    	.replaceAll("update", "forbidU")
    	.replaceAll("delete", "forbidD")
    	.replaceAll("and", "forbidA")
    	.replaceAll("or", "forbidO");
    
		if(!temp.equals(src)){
			System.out.println("輸出信息存在SQL進擊!");
			System.out.println("原始輸出信息-->"+temp);
			System.out.println("處置後信息-->"+src);
		}
		return src;
	}

xml設置裝備擺設:

<filter>
		<filter-name>XssFilter</filter-name>
		<filter-class>cn.com.jsoft.xss.XSSFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>XssFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

以上代碼僅僅將特別的sql字符,特別script劇本字符處置失落,詳細的頁面處置還須要後台處置!!

關於這篇java 過濾器filter防sql注入的完成代碼就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved