spring解决sql注入问题:自定义拦截器
2016-11-30 10:29
489 查看
近期刚做完的restful接口项目用安全软件扫描后,出现blind sql inject高危漏洞,查看,程序里已经使用了PreparedStatement预编译sql,却仍不好使,找不出原因,最后不得已,自定义了一个sql注入拦截器,对含有非法攻击字符的接口输入参数进行拦截,再次扫描后,漏洞消失。具体实现如下:
一、自定义拦截器类SqlInjectInterceptor,实现spring包的HandlerInterceptor拦截接口:
注明:本解决办法为参考了多个文章的基础上,自己编程实现,如有雷同,请谅解。
一、自定义拦截器类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>
注明:本解决办法为参考了多个文章的基础上,自己编程实现,如有雷同,请谅解。
相关文章推荐
- 解决自定义文件上传处理与Spring MultipartResolver的冲突问题
- 解决Spring的声明式事务中的自定义异常不回滚问题
- 解决mvn resources 与自定义拦截器DefaultInterceptor冲突的问题
- Spring 和 java 反射及自定义注解的问题解决!!
- 解决自定义拦截器导致默认的拦截器不起作用的问题
- Spring 3.1 注释方式实现拦截器无效问题解决办法
- Spring Cloud 自定义ConfigServer 解决敏感信息存储问题
- html+springMVC的拦截器token配置--解决ajax表单重复提交的问题
- Spring开发之拦截器解决跨域问题
- 再springMVC中自定义文件上传处理解决与原spring中MultipartResolve冲突问题
- springboot的拦截器如何注入service为空的问题解决方式
- Spring PropertyPlaceholderConfigurer 自定义扩展来解决多环境配置加载的问题
- 企业实战之Spring拦截器《解决跨域问题》
- 解决自定义文件上传处理与Spring MultipartResolver的冲突问题
- 详解SpringBoot 解决拦截器注入Service为空问题
- MyEclipse开发Struts+Spring+Hibernate中文化问题解决
- 关于扩展HTMLParser,解决自定义tag的问题
- 严重: Error listenerStart的解决办法---使用Spring时遇到的问题
- 解决问题(八)——jsf+spring+hibernate整合(二)
- Spring中解决Hibernate的lazy加载问题