fix checkSSRF
This commit is contained in:
57
.idea/workspace.xml
generated
57
.idea/workspace.xml
generated
@@ -2,6 +2,7 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="42982c84-cdb2-4596-b4aa-818c31fc199a" name="Default" comment="">
|
<list default="true" id="42982c84-cdb2-4596-b4aa-818c31fc199a" name="Default" comment="">
|
||||||
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/README.md" afterPath="$PROJECT_DIR$/README.md" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/security.java" afterPath="$PROJECT_DIR$/src/main/java/security.java" />
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/security.java" afterPath="$PROJECT_DIR$/src/main/java/security.java" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test.java" afterPath="$PROJECT_DIR$/src/main/java/test.java" />
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test.java" afterPath="$PROJECT_DIR$/src/main/java/test.java" />
|
||||||
</list>
|
</list>
|
||||||
@@ -29,12 +30,12 @@
|
|||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="README.md" pinned="false" current-in-tab="false">
|
<file leaf-file-name="README.md" pinned="false" current-in-tab="true">
|
||||||
<entry file="file://$PROJECT_DIR$/README.md">
|
<entry file="file://$PROJECT_DIR$/README.md">
|
||||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||||
<state split_layout="SPLIT">
|
<state split_layout="SPLIT">
|
||||||
<first_editor relative-caret-position="238">
|
<first_editor relative-caret-position="37">
|
||||||
<caret line="14" column="3" lean-forward="true" selection-start-line="14" selection-start-column="3" selection-end-line="14" selection-end-column="3" />
|
<caret line="29" column="14" lean-forward="true" selection-start-line="29" selection-start-column="14" selection-end-line="29" selection-end-column="14" />
|
||||||
<folding />
|
<folding />
|
||||||
</first_editor>
|
</first_editor>
|
||||||
<second_editor />
|
<second_editor />
|
||||||
@@ -42,11 +43,11 @@
|
|||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="security.java" pinned="false" current-in-tab="true">
|
<file leaf-file-name="security.java" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/src/main/java/security.java">
|
<entry file="file://$PROJECT_DIR$/src/main/java/security.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="276">
|
<state relative-caret-position="206">
|
||||||
<caret line="66" column="59" lean-forward="false" selection-start-line="66" selection-start-column="59" selection-end-line="66" selection-end-column="59" />
|
<caret line="18" column="14" lean-forward="true" selection-start-line="18" selection-start-column="14" selection-end-line="18" selection-end-column="38" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="n#!!doc" expanded="true" />
|
<element signature="n#!!doc" expanded="true" />
|
||||||
<element signature="imports" expanded="true" />
|
<element signature="imports" expanded="true" />
|
||||||
@@ -58,8 +59,8 @@
|
|||||||
<file leaf-file-name="test.java" pinned="false" current-in-tab="false">
|
<file leaf-file-name="test.java" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/src/main/java/test.java">
|
<entry file="file://$PROJECT_DIR$/src/main/java/test.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="289">
|
<state relative-caret-position="220">
|
||||||
<caret line="17" column="50" lean-forward="false" selection-start-line="17" selection-start-column="50" selection-end-line="17" selection-end-column="50" />
|
<caret line="13" column="32" lean-forward="true" selection-start-line="13" selection-start-column="32" selection-end-line="13" selection-end-column="32" />
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
@@ -87,9 +88,9 @@
|
|||||||
<list>
|
<list>
|
||||||
<option value="$PROJECT_DIR$/pom.xml" />
|
<option value="$PROJECT_DIR$/pom.xml" />
|
||||||
<option value="$PROJECT_DIR$/src/main/java/main.java" />
|
<option value="$PROJECT_DIR$/src/main/java/main.java" />
|
||||||
<option value="$PROJECT_DIR$/README.md" />
|
|
||||||
<option value="$PROJECT_DIR$/src/main/java/test.java" />
|
|
||||||
<option value="$PROJECT_DIR$/src/main/java/security.java" />
|
<option value="$PROJECT_DIR$/src/main/java/security.java" />
|
||||||
|
<option value="$PROJECT_DIR$/src/main/java/test.java" />
|
||||||
|
<option value="$PROJECT_DIR$/README.md" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
@@ -657,12 +658,12 @@
|
|||||||
<option name="number" value="Default" />
|
<option name="number" value="Default" />
|
||||||
<option name="presentableId" value="Default" />
|
<option name="presentableId" value="Default" />
|
||||||
<updated>1504604417100</updated>
|
<updated>1504604417100</updated>
|
||||||
<workItem from="1504604422158" duration="3470000" />
|
<workItem from="1504604422158" duration="4673000" />
|
||||||
</task>
|
</task>
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="TimeTrackingManager">
|
<component name="TimeTrackingManager">
|
||||||
<option name="totallyTimeSpent" value="3470000" />
|
<option name="totallyTimeSpent" value="4673000" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ToolWindowManager">
|
<component name="ToolWindowManager">
|
||||||
<frame x="0" y="0" width="1280" height="800" extended-state="0" />
|
<frame x="0" y="0" width="1280" height="800" extended-state="0" />
|
||||||
@@ -677,7 +678,7 @@
|
|||||||
<window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
<window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
|
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
|
||||||
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32876712" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.33424658" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Properties" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
<window_info id="Properties" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||||
@@ -763,29 +764,18 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/README.md">
|
|
||||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
|
||||||
<state split_layout="SPLIT">
|
|
||||||
<first_editor relative-caret-position="238">
|
|
||||||
<caret line="14" column="3" lean-forward="true" selection-start-line="14" selection-start-column="3" selection-end-line="14" selection-end-column="3" />
|
|
||||||
<folding />
|
|
||||||
</first_editor>
|
|
||||||
<second_editor />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/src/main/java/test.java">
|
<entry file="file://$PROJECT_DIR$/src/main/java/test.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="289">
|
<state relative-caret-position="220">
|
||||||
<caret line="17" column="50" lean-forward="false" selection-start-line="17" selection-start-column="50" selection-end-line="17" selection-end-column="50" />
|
<caret line="13" column="32" lean-forward="true" selection-start-line="13" selection-start-column="32" selection-end-line="13" selection-end-column="32" />
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/src/main/java/security.java">
|
<entry file="file://$PROJECT_DIR$/src/main/java/security.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="276">
|
<state relative-caret-position="206">
|
||||||
<caret line="66" column="59" lean-forward="false" selection-start-line="66" selection-start-column="59" selection-end-line="66" selection-end-column="59" />
|
<caret line="18" column="14" lean-forward="true" selection-start-line="18" selection-start-column="14" selection-end-line="18" selection-end-column="38" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="n#!!doc" expanded="true" />
|
<element signature="n#!!doc" expanded="true" />
|
||||||
<element signature="imports" expanded="true" />
|
<element signature="imports" expanded="true" />
|
||||||
@@ -793,5 +783,16 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/README.md">
|
||||||
|
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||||
|
<state split_layout="SPLIT">
|
||||||
|
<first_editor relative-caret-position="37">
|
||||||
|
<caret line="29" column="14" lean-forward="true" selection-start-line="29" selection-start-column="14" selection-end-line="29" selection-end-column="14" />
|
||||||
|
<folding />
|
||||||
|
</first_editor>
|
||||||
|
<second_editor />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
31
README.md
31
README.md
@@ -4,7 +4,14 @@
|
|||||||
|
|
||||||
## URL白名单验证
|
## URL白名单验证
|
||||||
|
|
||||||
验证代码
|
### 验证逻辑
|
||||||
|
|
||||||
|
1. 取URL一级域名
|
||||||
|
2. 判断是否在域名白名单列表内
|
||||||
|
|
||||||
|
### 验证代码
|
||||||
|
|
||||||
|
合法URL返回true,非法URL返回false
|
||||||
|
|
||||||
```java
|
```java
|
||||||
security checkUrl = new security();
|
security checkUrl = new security();
|
||||||
@@ -13,3 +20,25 @@ Boolean ret = checkUrl.checkUrlWlist("http://test.joychou.me", urlWList);
|
|||||||
System.out.println(ret);
|
System.out.println(ret);
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## SSRF
|
||||||
|
|
||||||
|
JAVA默认dns请求会有30s的缓存,所以默认不存在dns rebind问题。除非重新设置ttl为0。
|
||||||
|
### 验证逻辑
|
||||||
|
|
||||||
|
1. 取URL的IP
|
||||||
|
2. 判断IP是否是内网IP
|
||||||
|
3. 判断是否是内网IP
|
||||||
|
4. 请求URL
|
||||||
|
5. 如果有跳转,取出跳转URL,执行1
|
||||||
|
|
||||||
|
### 验证代码
|
||||||
|
|
||||||
|
如果是内网IP,返回false,表示checkSSRF不通过。
|
||||||
|
否则返回true。即合法返回true。
|
||||||
|
URL只支持HTTP协议。
|
||||||
|
|
||||||
|
```java
|
||||||
|
ret = checkUrl.checkSSRF("http://127.0.0.1");
|
||||||
|
System.out.println(ret);
|
||||||
|
```
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public class security {
|
|||||||
// 判断当前请求的URL是否是内网ip
|
// 判断当前请求的URL是否是内网ip
|
||||||
Boolean bRet = isInnerIpFromUrl(finalUrl);
|
Boolean bRet = isInnerIpFromUrl(finalUrl);
|
||||||
if (bRet) {
|
if (bRet) {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
connection = (HttpURLConnection) new URL(finalUrl).openConnection();
|
connection = (HttpURLConnection) new URL(finalUrl).openConnection();
|
||||||
@@ -98,9 +98,9 @@ public class security {
|
|||||||
} while (connection.getResponseCode() != HttpURLConnection.HTTP_OK);
|
} while (connection.getResponseCode() != HttpURLConnection.HTTP_OK);
|
||||||
connection.disconnect();
|
connection.disconnect();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public class test {
|
|||||||
// URL白名单组件测试
|
// URL白名单组件测试
|
||||||
security checkUrl = new security();
|
security checkUrl = new security();
|
||||||
String[] urlWList = {"joychou.com", "joychou.me"};
|
String[] urlWList = {"joychou.com", "joychou.me"};
|
||||||
Boolean ret = checkUrl.checkUrlWlist("http://test.joychou.me", urlWList);
|
Boolean ret = checkUrl.checkUrlWlist("http://test.joychou.org", urlWList);
|
||||||
System.out.println(ret);
|
System.out.println(ret);
|
||||||
|
|
||||||
// SSRF组件测试
|
// SSRF组件测试
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user