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  * www.2cto.com
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 sql
5   * @return
6   */ 
7   public static String TransactSQLInjection(String sql) { 
8   return sql.replaceAll(".*([';]+|(--)+).*", " "); 
9   }

Java防止SQL注入的几个途径的更多相关文章

  1. Java防止SQL注入的途径介绍

    为了防止SQL注入,最简洁的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只 ...

  2. Java防止SQL注入2(通过filter过滤器功能进行拦截)

    首先说明一点,这个过滤器拦截其实是不靠谱的,比如说我的一篇文章是介绍sql注入的,或者评论的内容是有关sql的,那会过滤掉:且如果每个页面都经过这个过滤器,那么效率也是非常低的. 如果是要SQL注入拦 ...

  3. Java防止SQL注入(转)

    一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...

  4. java web sql注入测试(1)---概念概述

    在进行java web 测试时,经常会忽略的测试种类就是sql注入测试,这类缺陷造成的原因是开发技术在这方面欠缺的表现,虽然不常见,但一旦有这类缺陷,就很因此对运营的数据造成很多不必要的损失,所以,还 ...

  5. java 防止sql注入的方法(非原创)

      一.SQL注入简介       SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQ ...

  6. Java 防SQL注入过滤器(拦截器)代码

    原文出自:https://blog.csdn.net/seesun2012 前言 浅谈SQL注入:        所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符 ...

  7. Java代码审计sql注入

    java_sec_code 该项目也可以叫做Java Vulnerability Code(Java漏洞代码). 每个漏洞类型代码默认存在安全漏洞(除非本身不存在漏洞),相关修复代码在注释里.具体可查 ...

  8. java web sql注入测试(4)--如何防止该类缺陷发生

    检查用户输入的合法性,确信输入的内容只包含合法的数据,数据检查应当在客户端和服务器端都执行之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性.在客户端,攻击者完全有可能获得网页的源代码,修 ...

  9. java web sql注入测试(3)---现象分析

    那为什么出现以上问题呢?这是程序代码层控制不当导致的.如果web前端对输入数据控制严格,会对数据库进行操作的字符串,在客户端做敏感字符转义处理,或者在操作数据库的dao层,使用动态参数的sql,不使用 ...

随机推荐

  1. hdu 1195 Open the Lock (BFS)

    Open the Lock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  2. poj 1062 昂贵的聘礼 (最短路径)

    昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33365   Accepted: 9500 Descriptio ...

  3. REST Web 服务(二)----JAX-RS 介绍

    1. 什么是JAX-RS? JAX-RS——Java API for RESTful Web Services,是为 Java 程序员提供的一套固定的接口(Java API),用于开发表述性状态转移( ...

  4. JavaScript要理解闭包先了解词法作用域

    之所以取名叫做词法作用域,是这个概念是js中相当基础也是极为重要的,很多想当然的错误或感觉怪异的问题都是和这个东西有关.所以,本文主要说下这个名词的概念以及讨论下他牵扯出来的有关变量.函数.闭包的问题 ...

  5. 石子归并的三种打开方式——难度递增———51Node

    1021 石子归并    N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价.计算将N堆石子合并成一堆的最小代价.   ...

  6. 使用rssh创建一个安全的文件服务器

    使用rssh创建一个安全的文件服务器 目前有这样一个需求,公司需要一台linux服务器作为文件服务器,但是基于安全性考虑,我不想使用ftp或者samba,但又必须允许用户上传文件.怎么办呢? 因为是l ...

  7. [1]区分event对象中的[clientX,offsetX,screenX,pageX]

    前言 在平时的开发中,非常讨厌的就是兼容性了,兼容性的问题总会让我们记忆混淆,所以这次来区分一下event对象中的常用获取鼠标位置. clientX clientY event.clientXeven ...

  8. Echarts 基础知识浅析

    1. 引入Echarts Echarts是基于canvas的数据可视化产品,由百度公司推出 参考官方文档,引入教程示例即可,注意有两种引入方式: (1)直接引入 (2)模块化引入 2. 基本API使用 ...

  9. 理解javascript的闭包,原型,和匿名函数及IIFE

    理解javascript的闭包,原型,和匿名函数(自己总结) 一 .>关于闭包 理解闭包 需要的知识1.变量的作用域 例1: var n =99; //建立函数外的全局变量 function r ...

  10. html 过滤器 c#

    using System.Text.RegularExpressions; using System.Web; internal class HtmlHelper {     /// <summ ...