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