龙哥网

龙哥网

『Java安全』SQL安全-ORDER BY注入
2022-03-01

文章目录

  • 原理
  • 防御
    • 关键字符串过滤
    • 使用列号排序

原理

SQL中:ORDER BY执行排序后面需要指定列名,该列名是不能被引号包含的否则就会被认为是一个字符串。

而PrepareStatment使用占位符传递参数时,会用单引号包裹参数,因此不能使用预编译

所以使用ORDER BY要搭配字符串拼接上列名

字符串拼接就可能会造成SQL注入

防御

关键字符串过滤

限制拼接内容

使用列号排序

非得用PrepareStatment预编译就用列号进行排序

String sql1 = "select * from testtest order by ?";
PreparedStatement pre1 = conn.prepareStatement(sql1);
pre1.setInt(1, 2);

欢迎在评论区留言,欢迎关注我的CSDN @Ho1aAs

免责声明
本站部分资源来源于互联网 如有侵权 请联系站长删除
龙哥网是优质的互联网科技创业资源_行业项目分享_网络知识引流变现方法的平台为广大网友提供学习互联网相关知识_内容变现的方法。