关于order by引发的SQL注入
对于order by处的SQL注入发生比例比较高,一般在管理系统/商品网站中可以多注意存在排序的功能,多注意这些字段可控是否存在SQL注入
一般在预编译的情况下,id可以用预编译,但是age变量为什么不好用预编译?原因是预编译的话age字段就是字符串,order by对字符串就不会进行排序了,无意义!

所以一般存在SQL注入的代码就是如下所示:
String sql = "select * from userinfo where id = ?" + " order by " + age + " asc";
ps = conn.prepareStatement(sql);
ps.setString(1, id);
rs = ps.executeQuery();

所以如果真正要对该字段进行排序的话,就不能使用预编译,需要自己手动进行过滤!
如 Mybatis 框架中的 like、 in和 order by 语句、Hibernate 框架中的 createQuery()函数等,如果使用不当,依旧可能造成 sql 注入。

浙公网安备 33010602011771号