sdl安全知识杂记

Author Avatar
Xzhah 8月 15, 2024
  • 在其它设备中阅读本文章

sdl相关知识杂记

sql注入代码审计

1.可以考虑从source点和sink点入手,比如把相关api都筛选出来。比如statement.executeQuery(sql)。如果sql参数是拼接而来(用户可控某些字段),那么就可能有sql注入风险。

2.PreparedStatement: PreparedStatement会对SQL语句进行预编译,预编译一定程度上可以防止sql注入,同时还减少sql语句的编译次数,提高性能。

原理:先编译sql语句,预编译的语句只作为字符串执行,执行阶段不会再对sql语句进行解析,因此解决了注入问题。语句是语句,参数是参数,只能按照语句的语义跑。

预编译不是万能的:预编译仅仅能防住可参数化位置的sql注入,对于不可参数化的部分,预编译是防不了的。比如order by是没有办法参数化的,因为这类关键字后面一般接字段,不能加引号,但预编译会自动加上引号,所以矛盾了。不能加引号的有:表名、列名、order by、 group by、limit、join、from

可能还会有的漏洞:比如使用PreparedStatement的时候没使用“?”作为占位符,直接拼接仍然会有sql注入漏洞。使用in语句或Like语句。%和_符号,预编译不能处理相关符号,会导致慢查询,形成dos攻击。

Mybatis框架下的sql注入

待补充。。。