java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构 ,大部分的SQL注入已经挡住了, 在WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数01 import java.io.IOException;02 import java.util.Iterator;03 import javax.servlet.Filter;04 import javax.servlet.FilterChain;05 import javax.servlet.FilterConfig;06 import javax.servlet.ServletException;07 import javax.servlet.ServletRequest;08 import javax.servlet.ServletResponse;09 import javax.servlet.http.HttpServletRequest;10 import javax.servlet.http.HttpServletResponse;11 /**12 * 通过Filter过滤器来防SQL注入攻击13 *14 */15 public class SQLFilter implements Filter {16 private String inj_str = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|; |or|-|+|,";17 protected FilterConfig filterConfig = null;18 /**19 * Should a character encoding specified by the client be ignored?20 */21 protected boolean ignore = true;22 public void init(FilterConfig config) throws ServletException {23 this.filterConfig = config;24 this.inj_str = filterConfig.getInitParameter("keywords");25 }26 public void doFilter(ServletRequest request, ServletResponse response,27 FilterChain chain) throws IOException, ServletException {28 HttpServletRequest req = (HttpServletRequest)request;29 HttpServletResponse res = (HttpServletResponse)response;30 Iterator values = req.getParameterMap().values().iterator();//获取所有的表单参数31 while(values.hasNext()){32 String[] value = (String[])values.next();33 for(int i = 0;i < value.length;i++){34 if(sql_inj(value[i])){35 //TODO这里发现sql注入代码的业务逻辑代码36 return;37 }38 }39 }40 chain.doFilter(request, response);41 }42 public boolean sql_inj(String str)43 {44 String[] inj_stra=inj_str.split("\\|");45 for (int i=0 ; i < inj_stra.length ; i++ )46 {47 if (str.indexOf(" "+inj_stra[i]+" ")>=0)48 {49 return true;50 }51 }52 return false;53 }54 }也可以单独在需要防范SQL注入的JavaBean的字段上过滤:1 /**2 * 防止sql注入3 *4 * @param sql5 * @return6 */7 public static String TransactSQLInjection(String sql) {8 return sql.replaceAll(".*([';]+|(--)+).*", " ");9 }
详细解决方案
Java防止SQL流入的几个途径
热度:19 发布时间:2016-05-05 13:39:12.0
相关解决方案
- java 乱码 汉字是 ? 如何转换成汉字
- java web 登录次数限制,该如何解决
- java 工商银行网银支付 B2B的 都亟需什么,需要注意什么
- Java Applet程序从JDK6升级到7时遇到的有关问题
- java web 视频相干
- 请教一个关于链接后缀的有关问题(java web 应用)
- java 系统单点登录解决方案
- java.lang.NumberFormatException: For input string: "id"该如何处理
- java.lang.NoSuchMethodException: setId([Ljava.lang.String;)解决方法
- java 获取客户端IP解决办法
- JAVA 后台怎么获得前台页面FCKedit编辑器中的内容以及内容的样式
- java 正则化匹配有关问题
- java web 受阻
- java.lang.IllegalStateException: No output folder,该怎么解决
- java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.makeAccess,该如何解决
- java 乱码有关问题 急求大神
- java EE错误如何解决阿,都是过了,没有能解决的!
- java 工程打包有关问题 多谢各位大神!多谢
- JAVA WEB导航条,该怎么处理
- java.sql.SQLException: Access denied for user 'root'@'localhost' (using password,该如何处理
- java 中Node 有关问题
- 关于 java 引述传递和值传递,你的知否
- 吐了,java Timer 终止不了。
- Java Web 学习中有关问题,请高手指教
- java web中的url地址小疑点。
- java web开发解决办法
- java.lang.NullPointerException解决方法
- 关于 java cast 有关问题,你明白不
- java ftp 下传和上载乱码有关问题
- java web项目上的一些文件