2017-09-05 17:18:14 +08:00
|
|
|
|
# Trident (三叉戟)
|
2017-09-05 17:11:03 +08:00
|
|
|
|
|
2017-09-05 17:18:14 +08:00
|
|
|
|
> Java Code Security Component (JAVA代码安全组件)
|
2017-09-05 18:16:08 +08:00
|
|
|
|
|
|
|
|
|
|
## URL白名单验证
|
|
|
|
|
|
|
2017-09-05 21:12:38 +08:00
|
|
|
|
### 验证逻辑
|
|
|
|
|
|
|
|
|
|
|
|
1. 取URL一级域名
|
|
|
|
|
|
2. 判断是否在域名白名单列表内
|
|
|
|
|
|
|
|
|
|
|
|
### 验证代码
|
|
|
|
|
|
|
2017-09-05 21:16:05 +08:00
|
|
|
|
合法URL返回true,非法URL返回false。
|
2017-09-05 18:16:08 +08:00
|
|
|
|
|
|
|
|
|
|
```java
|
2017-09-05 18:17:43 +08:00
|
|
|
|
security checkUrl = new security();
|
|
|
|
|
|
String[] urlWList = {"joychou.com", "joychou.me"};
|
|
|
|
|
|
Boolean ret = checkUrl.checkUrlWlist("http://test.joychou.me", urlWList);
|
2017-09-05 21:12:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## SSRF
|
|
|
|
|
|
|
|
|
|
|
|
JAVA默认dns请求会有30s的缓存,所以默认不存在dns rebind问题。除非重新设置ttl为0。
|
2017-09-05 21:16:05 +08:00
|
|
|
|
|
2017-09-05 21:12:38 +08:00
|
|
|
|
### 验证逻辑
|
|
|
|
|
|
|
2017-09-05 21:25:12 +08:00
|
|
|
|
1. 取URL的Host
|
|
|
|
|
|
2. 取Host的IP
|
|
|
|
|
|
3. 判断是否是内网IP,是内网IP直接return,不执行第4步.
|
2017-09-05 21:12:38 +08:00
|
|
|
|
4. 请求URL
|
2017-09-05 21:25:12 +08:00
|
|
|
|
5. 如果有跳转,取出跳转URL,执行第1步。
|
2017-09-05 21:12:38 +08:00
|
|
|
|
|
|
|
|
|
|
### 验证代码
|
|
|
|
|
|
|
2017-09-05 21:18:00 +08:00
|
|
|
|
如果是内网IP,返回false,表示checkSSRF不通过,否则返回true,即合法返回true。
|
2017-09-05 21:12:38 +08:00
|
|
|
|
URL只支持HTTP协议。
|
|
|
|
|
|
|
|
|
|
|
|
```java
|
2017-09-05 21:16:05 +08:00
|
|
|
|
security checkUrl = new security();
|
2017-09-05 21:12:38 +08:00
|
|
|
|
ret = checkUrl.checkSSRF("http://127.0.0.1");
|
|
|
|
|
|
```
|