防止SQL注入

参考:http://hi.baidu.com/wangyue06/item/c00c824b35cf740ae835049c

1.传统JDBC,采用PreparedStatement 。预编译语句集,内置了处理SQL注入的能力

  String sql= "select * from users where username=? and password=?";    //如果把改为:username1,按参数名绑定
        PreparedStatement preState = conn.prepareStatement(sql);
        preState.setString(1, userName);                         //则此处变为.setString("username1",username)
        preState.setString(2, password);
        ResultSet rs = preState.executeQuery();

2. 采用正则表达式,将输入的所有特殊符号转换为空格或其他字符

public static String TransactSQLInjection(String str)
        {
              return str.replaceAll(".*([';]+|(--)+).*", " ");
           // 我认为 应该是return str.replaceAll("([';])+|(--)+","");-->这是原作者的注释,个人不是很赞同。
        }
        userName=TransactSQLInjection(userName);
        password=TransactSQLInjection(password);
        String sql="select * from users where username='"+userName+"' and password='"+password+"' ";
        Statement sta = conn.createStatement();
        ResultSet rs = sta.executeQuery(sql);

 

参考:http://blog.csdn.net/fufengrui/article/details/7740288

3. JAVA Web中,编写Fileter,实现对renquest请求中参数的不合法字符替换

for(String word : invalidsql){  
                if(word.equalsIgnoreCase(value) || value.contains(word)){  
                    if(value.contains("<")){  
                        value = value.replace("<", "<");     //这个个人认为括号中第二个<应该替换成其他符号 
                    }  
                    if(value.contains(">")){  
                        value = value.replace(">", ">");  
                    }  
                    request.getSession().setAttribute("sqlInjectError", "the request parameter \""+value+"\" contains keyword: \""+word+"\"");  
                    response.sendRedirect(request.getContextPath()+error);  
                    return;  
                }  
            }  

 

4.hibernate 参考:http://www.cnblogs.com/yhason/archive/2012/06/07/2540840.html

转载于:https://www.cnblogs.com/nkxyf/archive/2013/03/28/2987031.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值