David Benson 3 gadi atpakaļ
vecāks
revīzija
283d41ec80
1 mainītis faili ar 38 papildinājumiem un 28 dzēšanām
  1. 38 28
      src/main/java/com/mxgraph/online/ProxyServlet.java

+ 38 - 28
src/main/java/com/mxgraph/online/ProxyServlet.java

@@ -15,6 +15,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.net.UnknownHostException;
+import java.net.InetAddress;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -245,42 +246,51 @@ public class ProxyServlet extends HttpServlet
 			{
 				URL parsedUrl = new URL(url);
 				String protocol = parsedUrl.getProtocol();
-				String host = parsedUrl.getHost().toLowerCase();
+				String host = parsedUrl.getHost();
+				InetAddress address = InetAddress.getByName(host);
+				String hostAddress = address.getHostAddress();
+				host = host.toLowerCase();
 
 				return (protocol.equals("http") || protocol.equals("https"))
-						&& !host.endsWith(".internal")
-						&& !host.endsWith(".local")
-						&& !host.contains("localhost")
-						&& !host.startsWith("0.") // 0.0.0.0/8
-						&& !host.startsWith("10.") // 10.0.0.0/8
-						&& !host.startsWith("127.") // 127.0.0.0/8
-						&& !host.startsWith("169.254.") // 169.254.0.0/16
-						&& !host.startsWith("172.16.") // 172.16.0.0/12
-						&& !host.startsWith("172.17.") // 172.16.0.0/12
-						&& !host.startsWith("172.18.") // 172.16.0.0/12
-						&& !host.startsWith("172.19.") // 172.16.0.0/12
-						&& !host.startsWith("172.20.") // 172.16.0.0/12
-						&& !host.startsWith("172.21.") // 172.16.0.0/12
-						&& !host.startsWith("172.22.") // 172.16.0.0/12
-						&& !host.startsWith("172.23.") // 172.16.0.0/12
-						&& !host.startsWith("172.24.") // 172.16.0.0/12
-						&& !host.startsWith("172.25.") // 172.16.0.0/12
-						&& !host.startsWith("172.26.") // 172.16.0.0/12
-						&& !host.startsWith("172.27.") // 172.16.0.0/12
-						&& !host.startsWith("172.28.") // 172.16.0.0/12
-						&& !host.startsWith("172.29.") // 172.16.0.0/12
-						&& !host.startsWith("172.30.") // 172.16.0.0/12
-						&& !host.startsWith("172.31.") // 172.16.0.0/12
-						&& !host.startsWith("192.0.0.") // 192.0.0.0/24
-						&& !host.startsWith("192.168.") // 192.168.0.0/16
-						&& !host.startsWith("198.18.") // 198.18.0.0/15
-						&& !host.startsWith("198.19.") // 198.18.0.0/15
+						&& !address.isAnyLocalAddress()
+						&& !address.isLoopbackAddress()
+						&& !host.endsWith(".internal") // Redundant
+						&& !host.endsWith(".local") // Redundant
+						&& !host.contains("localhost") // Redundant
+						&& !hostAddress.startsWith("0.") // 0.0.0.0/8 
+						&& !hostAddress.startsWith("10.") // 10.0.0.0/8
+						&& !hostAddress.startsWith("127.") // 127.0.0.0/8
+						&& !hostAddress.startsWith("169.254.") // 169.254.0.0/16
+						&& !hostAddress.startsWith("172.16.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.17.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.18.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.19.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.20.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.21.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.22.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.23.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.24.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.25.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.26.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.27.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.28.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.29.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.30.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("172.31.") // 172.16.0.0/12
+						&& !hostAddress.startsWith("192.0.0.") // 192.0.0.0/24
+						&& !hostAddress.startsWith("192.168.") // 192.168.0.0/16
+						&& !hostAddress.startsWith("198.18.") // 198.18.0.0/15
+						&& !hostAddress.startsWith("198.19.") // 198.18.0.0/15
 						&& !host.endsWith(".arpa"); // reverse domain (needed?)
 			}
 			catch (MalformedURLException e)
 			{
 				return false;
 			}
+			catch (UnknownHostException e)
+			{
+				return false;
+			}
 		}
 		else
 		{