spring解决sql注入问题:自定义拦截器

        近期刚做完的restful接口项目用安全软件扫描后,出现blind sql inject高危漏洞,查看,程序里已经使用了PreparedStatement预编译sql,却仍不好使,找不出原因,最后不得已,自定义了一个sql注入拦截器,对含有非法攻击字符的接口输入参数进行拦截,再次扫描后,漏洞消失。具体实现如下:

      一、自定义拦截器类SqlInjectInterceptor,实现spring包的HandlerInterceptor拦截接口:

package com.bonc.cb.interceptor;
public class SqlInjectInterceptor implements HandlerInterceptor{

	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		// TODO Auto-generated method stub
		if(arg0.getRequestURI().indexOf("CheckAcc")>-1){
			Enumeration<String> names = arg0.getParameterNames();
			while(names.hasMoreElements()){
				String name = names.nextElement();
				String[] values = arg0.getParameterValues(name);
				for(String value: values){
					if(judgeXSS(value.toLowerCase())){
						arg1.setContentType("text/html;charset=UTF-8");
						arg1.getWriter().print("参数含有非法攻击字符,已禁止继续访问!");
						return false;
					}
				}
			}
		}
		
		return true;
	}
	
	/**
	 * 判断参数是否含有攻击串
	 * @param value
	 * @return
	 */
	public boolean judgeXSS(String value){
		if(value == null || "".equals(value)){
			return false;
		}
		String xssStr = "and|or|select|update|delete|drop|truncate|%20|=|-|--|;|'|%|#|+|,|//|/| |\\|!=|(|)";
		String[] xssArr = xssStr.split("\\|");
		for(int i=0;i<xssArr.length;i++){
			if(value.indexOf(xssArr[i])>-1){
				return true;
			}
		}
		return false;
		
	}

}
        二、自定义拦截器配置

<!-- 解决SQL注入拦截器 -->
	<bean id="SqlInjectInterceptor" class="com.bonc.cb.interceptor.SqlInjectInterceptor"></bean>

	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">  
	    <property name="interceptors">  
	        <list>  
	            <ref bean="SqlInjectInterceptor"  />  
	        </list>  
	    </property>  
	</bean>

注明:本解决办法为参考了多个文章的基础上,自己编程实现,如有雷同,请谅解。


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值