亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java 過濾器filter防sql注入的實(shí)現(xiàn)代碼

 更新時(shí)間:2016年08月25日 09:23:45   投稿:jingxian  
下面小編就為大家?guī)硪黄猨ava 過濾器filter防sql注入的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

實(shí)例如下:

XSSFilter.java

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

		//flag = true 只做URL驗(yàn)證; flag = false 做所有字段的驗(yàn)證;
		boolean flag = true;
		if(flag){
			//只對(duì)URL做xss校驗(yàn)
			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{
			
			//對(duì)請(qǐng)求中的所有東西都做校驗(yàn),包括表單。此功能校驗(yàn)比較嚴(yán)格容易屏蔽表單正常輸入,使用此功能請(qǐng)注意。
			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腳本字符處理掉,具體的頁面處理還需要后臺(tái)處理??!

關(guān)于這篇java 過濾器filter防sql注入的實(shí)現(xiàn)代碼就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于controller的異常處理及service層的事務(wù)控制方式

    關(guān)于controller的異常處理及service層的事務(wù)控制方式

    這篇文章主要介紹了關(guān)于controller的異常處理及service層的事務(wù)控制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 深入理解Java設(shè)計(jì)模式之命令模式

    深入理解Java設(shè)計(jì)模式之命令模式

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之命令模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解
    2021-11-11
  • Java深入淺出說流的使用

    Java深入淺出說流的使用

    這篇文章主要介紹了Java深入淺出說流的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java transient關(guān)鍵字使用小記

    Java transient關(guān)鍵字使用小記

    這篇文章主要為大家詳細(xì)介紹了Java transient關(guān)鍵字的使用方法,感興趣的小伙伴們可以參考一下
    2016-06-06
  • springboot X-Accel-Redirect 大文件下載實(shí)現(xiàn)

    springboot X-Accel-Redirect 大文件下載實(shí)現(xiàn)

    本文主要介紹了springboot X-Accel-Redirect 大文件下載實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Linux服務(wù)器如何部署java項(xiàng)目

    Linux服務(wù)器如何部署java項(xiàng)目

    這篇文章主要介紹了Linux服務(wù)器如何部署java項(xiàng)目問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 利用Hadoop實(shí)現(xiàn)求共同好友的示例詳解

    利用Hadoop實(shí)現(xiàn)求共同好友的示例詳解

    一想到要實(shí)現(xiàn)求共同好友的功能,很多人都會(huì)想到redis來實(shí)現(xiàn)。但是redis存儲(chǔ)和數(shù)據(jù)和計(jì)算時(shí)需要耗費(fèi)較多的內(nèi)存資源。所以文本將介紹另一種方法,即利用Hadoop中的MapReduce來實(shí)現(xiàn),感興趣的可以了解一下
    2022-01-01
  • Java開發(fā)如何把數(shù)據(jù)庫里的未付款訂單改成已付款

    Java開發(fā)如何把數(shù)據(jù)庫里的未付款訂單改成已付款

    這篇文章主要介紹了Java開發(fā)如何把數(shù)據(jù)庫里的未付款訂單改成已付款,先介紹MD5算法,簡(jiǎn)單的來說,MD5能把任意大小、長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換成固定長(zhǎng)度的一串字符,實(shí)現(xiàn)思路非常簡(jiǎn)單需要的朋友可以參考下
    2022-11-11
  • SpringBoot整合Mail發(fā)送郵件功能

    SpringBoot整合Mail發(fā)送郵件功能

    我們?cè)诰W(wǎng)站上注冊(cè)賬號(hào)的時(shí)候一般需要獲取驗(yàn)證碼,而這個(gè)驗(yàn)證碼一般發(fā)送在你的手機(jī)號(hào)上還有的是發(fā)送在你的郵箱中,注冊(cè),賬號(hào)密碼…都需要用到驗(yàn)證,今天就演示一下如何用SpringBoot整合Mail發(fā)送郵箱
    2021-11-11
  • java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解

    java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解

    這篇文章主要為大家介紹了java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06

最新評(píng)論