+ -
当前位置:首页 → 问答吧 → 菜鸟提问:对于JDBC模糊查询时候.你们是怎么防止SQL注入的.

菜鸟提问:对于JDBC模糊查询时候.你们是怎么防止SQL注入的.

时间:2011-08-25

来源:互联网


  RT....

作者: NobodyCanHelpMe   发布时间: 2011-08-25

......

作者: NobodyCanHelpMe   发布时间: 2011-08-25

预编译SQL。。。 比如 select * from xxx a where a.xx = ?

作者: forhd   发布时间: 2011-08-25

第一种采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可:
  String sql= "select * from users where username=? and password=?;
  PreparedStatement preState = conn.prepareStatement(sql);
  preState.setString(1, userName);
  preState.setString(2, password);
  ResultSet rs = preState.executeQuery();
  ...

  第二种是采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入
  public static String TransactSQLInjection(String str)
  {
  return str.replaceAll(".*([';]+|(--)+).*", " ");
  }

  userName=TransactSQLInjection(userName);
  password=TransactSQLInjection(password);

  String sql="select * from users where username='"+userName+"' and password='"+password+"' "

作者: huangchenliang   发布时间: 2011-08-25

预编译是最好的选择。
将条件set进语句中。

作者: huxiweng   发布时间: 2011-08-25

采用预编译啊

作者: h932075062   发布时间: 2011-08-25

这个任何一本JDBC相关的书都会提到的。preparedStatement进行预编译~~

作者: walkman_22   发布时间: 2011-08-25

页面禁用非法字符 = <> 
后台预编译

作者: zn85600301   发布时间: 2011-08-25

PreparedStatement

作者: x19881216   发布时间: 2011-08-25

使用 PreparedStatement

作者: lianyue   发布时间: 2011-08-25