关于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 注入。

参考文章:https://blog.csdn.net/cpongo3/article/details/88742585

posted @ 2021-05-02 16:45  zpchcbd  阅读(1157)  评论(0)    收藏  举报