https://github.com/bewhale/JavaSec
https://github.com/j3ers3/Hello-Java-Sec
https://mp.weixin.qq.com/s/ZO4tpz9ys6kCIryNhA5nYw
#Java 安全 -SQL 注入 -JDBC&MyBatis
-JDBC
1 、采用 Statement 方法拼接 SQL 语句
2 、 PrepareStatement 会对 SQL 语句进行预编译,但如果直接采取拼接的方式构造
SQL ,此时进行预编译也无用。
3 、 JDBCTemplate 是 Spring 对 JDBC 的封装,如果使用拼接语句便会产生注入
安全写法: SQL 语句占位符( ? ) + PrepareStatement 预编译
-MyBatis
MyBatis 支持两种参数符号,一种是 # ,另一种是 $ , # 使用预编译, $ 使用拼接 SQL 。
1 、 order by 注入:由于使用 #{} 会将对象转成字符串,形成 order by "user"
desc 造成错误,因此很多研发会采用 ${} 来解决,从而造成注入 .
2 、 like 注入:模糊搜索时,直接使用 '%#{q}%' 会报错,部分研发图方便直接改成
'%${q}%' 从而造成注入 .
3 、 in 注入: in 之后多个 id 查询时使用 # 同样会报错,从而造成注入 .
- 代码审计案例: inxedu 后台 MyBatis 注入
#Java 安全 -XXE 注入 -Reader&Builder
XXE (XML External Entity Injection), XML 外部实体注入,当开发人员配置
其 XML 解析功能允许外部实体引用时,攻击者可利用这一可引发安全问题的配置方式,
实施任意文件读取、内网端口探测、命令执行、拒绝服务等攻击。
-XMLReader
-SAXReader
-SAXBuilder
-Unmarshaller
-DocumentBuilder
/**
* 审计的函数
* 1. XMLReader
* 2. SAXReader
* 3. DocumentBuilder
* 4. XMLStreamReader
* 5. SAXBuilder
* 6. SAXParser
* 7. SAXSource