定义:
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
2. 防止SQL注入的方法:
A:使用PreparedStatement代替Statement
1)使用PreparedStatement 比Statement的代码的可读性和可维护性更好.
2)PreparedStatement尽最大可能提高性能.
3)最重要的一点是PreparedStatement极大地提高系统的安全性.
- sql="select * from admin where username=? and password=?";
- PreparedStatement psmt= con.prepareStatement(sql);
- psmt.setString(1,username);
- psmt.setString(2,password);
- ResultSet rs = psmt.executeQuery();
- if(rs.next){
- rs.close();
- con.close();
- return false;
- }
- else{
- rs.close();
- con.close();
- return true;
- }
B: 使用字符串过滤
- public static String filterContent(String content){
- String flt ="'|and|exec|insert|select|delete|update|count|*|%
- |chr|mid|master|truncate|char|declare|;|or|-|+|,";
- Stringfilter[] = flt.split("\\|");
- for(int i=0;i<filter.length ; i++)
- {
- content.replace(filter[i], "");
- }
- return content;
- }
经验分享:
1、分隔符为“.”(无输出),“|”(不能得到正确结果)转义字符时,“*”,“+”时出错抛出异常,都必须在前面加必须得加"\\",如split(\\|);
2、如果用"\"作为分隔,就得写成这样:String.split("\\\\"),因为在Java中是用"\\"来表示"\"的,字符串得写成这样:String Str="a\\b\\c";
转义字符,必须得加"\\";
3、如果在一个字符串中有多个分隔符,可以用"|"作为连字符,比如:String str="Java string-split#test",可以用Str.split(" |-|#")把每个字符串分开;
或者使用Filter来过滤全局的表单参数。