文章目录
之前的文章,
php代码审计7之sql注入
1、审计注意
主要是先确认项目使用的框架技术,
使用不同的框架技术,关注点也不太相同
2、JDBC
目前常用的执行对象接口有三种:
Statement、PreparedStatement和CallableStatement
他们的关系如下,即一些函数就是封装了一些别的函数,

2.1、Statement(存在注入)
• Statement 主要用于执行静态SQL语句,即内容固定不变的SQL语句。
• Statement 每执行一次都要对传入的SQL语句编译一次,效率较低。

2.2、PreparedStatement(安全)
• PreparedStatement是预编译参数化查询执行SQL语句的方式

2.3、CallableStatement(可造成注入)
该函数实际场景不常见,
CallableStatement接口提供了执行存储过程的方法。
存在问题的写法,

万能密码成功,

安全的写法(参数化查询)

小结:
使用“ + ”进行拼接参数会操作注入;
直接使用“ = ”不会造成问题
3、Mybatis框架安全
3.1、两种方式:
通过${param}方式 、、存在注入
通过#{param}方式 、、安全
有些情况下,直接使用“ #{param}方式 ”会报错,这就需要我们使用稍微复杂的解决方法。
3.2、like的解决:
直接这么写会报错,
select * from student_table where student_name like '%#{name}%'
安全且符合业务的写法,
select * from student_table where student_name like concat('%',#{name}, '%')
3.3、IN语句
安全且符合业务的写法,
略微复杂,简单的说借助foreach语句(需要的时候在谷歌吧)
无论如何,不能直接使用“ ${} ”来处理用户传入的参数
3.4、Order/Group by语句
安全且符合业务的写法,
通常采用白名单,只开放有限集合,使用间接对象引用,
如果传来的参数不在白名单列表中,直接返回错误即可。
2006

被折叠的 条评论
为什么被折叠?



