Files
trident/README.md

76 lines
1.6 KiB
Markdown
Raw Normal View History

2017-09-06 17:45:41 +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
2017-09-06 11:44:17 +08:00
目前支持的功能如下:
2017-09-13 10:56:58 +08:00
1. URL白名单验证 (已完成)
2. checkSSRF (已完成)
3. checkReferer (未做)
4. csrfToken (未做)
5. xssEncode (未做)
6. getRealIP (未做)
2017-09-06 11:44:17 +08:00
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-14 17:38:34 +08:00
// URL白名单组件测试
checkURL urlCheck = new checkURL();
2017-09-05 18:17:43 +08:00
String[] urlWList = {"joychou.com", "joychou.me"};
2017-09-14 17:38:34 +08:00
Boolean ret = urlCheck.checkUrlWlist("http://test.joychou.org", urlWList);
System.out.println(ret);
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-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-14 17:38:34 +08:00
// SSRF组件测试
SSRF check = new SSRF();
2017-09-06 17:45:41 +08:00
String url = "http://dns_rebind.joychou.me";
2017-09-14 17:38:34 +08:00
ret = check.checkSSRF(url);
2017-09-06 17:45:41 +08:00
if (ret){
2017-09-14 17:38:34 +08:00
String con = Request.Get(url).execute().returnContent().toString();
System.out.println(con);
2017-09-06 17:45:41 +08:00
}
else {
System.out.println("Bad boy. The url is illegal");
}
2017-09-05 21:12:38 +08:00
```
2017-09-06 17:45:41 +08:00
### 绕过姿势
2017-09-14 17:38:34 +08:00
以上代码在设置TTL为0的情况可以用DNS Rebinding绕过。
但是只要Java不设置TTL为0该代码逻辑上不存在被绕过风险。
## 获取真实IP
2017-09-06 17:45:41 +08:00
2017-09-14 17:38:34 +08:00
用这份代码必须保证前面Proxy有把真实IP放到X-Real-IP头。
2017-09-06 17:45:41 +08:00