请问一下高手们,小弟最近看了比较多的sql注入方面的文章,但无一例外全是.net和php的,没看到有java的。
java的sql注入按道理说跟那边是一样的不是吗?怎么会没这方面的相关的文章呢?
顺便提一下,小弟想进学习下sql注入在java方面的防范,谢谢

解决方案 »

  1.   

    尽量别去用字符串拼sql语句就好了。
      

  2.   

    一般使用struts在页面上就很难注入了,外加使用 sql占位,基本侵入J2EE系统还是攻击系统漏洞你使用1,1传入无验证类型,自动将分割区前位截断。
      

  3.   

    有些人喜欢让语句直接返回一个结果(true或者false) 但是那是很长时间以前的事情了 现在很少会因为这个被攻击的 因为我开始学的时候已经没有人教我按照那种错误的方式写东西了
      

  4.   

    //省略代码
    String name = request.getParameter("name");
    String pwd = request.getParameter("name");if(null == name||null == pwd){
    response.sendRedirect("login.jsp");
    return;
    }
    if(name.equals("")||pwd.equals("")){
    out.println("用户名和密码不能为空,请重新<a href = login.jsp>登录</a>");
    return;
    }
    //这中间省略部分代码
    Statement stmt = conn.createStatement();
    String strCmd = "select username from managers where username="+"'name"'and password ='"+pwd+"'";
    ResultSet rs = stmt.executeQuery(strCmd);

    if(rs.next()){
    sesssion.setAttribute("use",name);
    response.sendRedirect("admin.jsp");
    return;
    }else{
    response.sendRedirect("login.jsp");
    return;
    }

    如果有恶意用户通过查看网页源代码,知道了表单中输入用户名的文本域和口令域的名字,直接在浏览器的地址中输入如下的URL:http://www.asdf.com/loginchk.jsp?name=abc&password=123456'or'1'='1,于是就顺利地访问到了管理页面。
    select username from managers where username='abc' and password='123456' or'1'=1
    最后的or '1'=1,这是一个恒等的条件。是一个特殊的SQL查询,让原本不成立的条件(用户名和密码的匹配条件)成立了。这个就是SQL注入攻击的例子可以使用PreparedStatement取代Statement执行查询语句。
      

  5.   

    java代码上就有实现,用?不用字符串拼接:
    public String query(String userName,String password,Connection conn){
    String returnS="";
    try {
    PreparedStatement pst=conn.prepareStatement("select user_name from ky_user where user_name=? and enter_password= MD5(?)");
    pst.setString(1, userName);
    pst.setString(2, password);
    ResultSet rs=pst.executeQuery();
    if(rs.next()){
    returnS= "userPasswordCorrect";
    }else{
    returnS= "userPasswordError";
    }

    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return returnS;
    }
      

  6.   

    slect * from tablename where id=?
      

  7.   

    你用 PreparedStatement 的话可以杜绝 SQL 注入!
      

  8.   

    hibernate里可以通过setxxx方法获取字符串防止注入攻击