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