Files
trident/README.md

52 lines
1.3 KiB
Markdown
Raw Normal View History

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
```
2017-09-05 22:37:05 +08:00
## checkSSRF
2017-09-05 21:12:38 +08:00
2017-09-06 11:42:35 +08:00
JAVA默认DNS请求会有30s的缓存所以默认不存在DNS Rebind问题。除非重新设置TTL为0。
如果有大佬能绕过麻烦提个ISSUE或者PR。
我自己测试以下方法均没绕过。但是用DNS Rebind方法在调试的时候均可以测试成功所以我怀疑设置TTL位0未成功。
- DNS Rebind手动设置JAVA的TTL为0
- 域名解析2个A记录地址外网+内网)
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
2017-09-05 22:33:00 +08:00
3. 判断是否是内网IP是内网IP直接return不再往下执行
2017-09-05 21:12:38 +08:00
4. 请求URL
2017-09-05 22:33:00 +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");
```