浏览代码

add additional allowed hosts

Jeffrey Morgan 1 年之前
父节点
当前提交
5c143af726
共有 1 个文件被更改,包括 33 次插入14 次删除
  1. 33 14
      server/routes.go

+ 33 - 14
server/routes.go

@@ -915,9 +915,9 @@ func allowedHost(host string) bool {
 	}
 	}
 
 
 	var tlds = []string{
 	var tlds = []string{
-		".localhost",
-		".local",
-		".internal",
+		"localhost",
+		"local",
+		"internal",
 	}
 	}
 
 
 	for _, tld := range tlds {
 	for _, tld := range tlds {
@@ -929,24 +929,36 @@ func allowedHost(host string) bool {
 	return false
 	return false
 }
 }
 
 
-func allowedHostsMiddleware(addr net.Addr) gin.HandlerFunc {
-	return func(c *gin.Context) {
-		if addr == nil {
-			c.Next()
-			return
-		}
+func ips() []string {
+	var ips []string
 
 
-		if !netip.MustParseAddrPort(addr.String()).Addr().IsLoopback() {
-			c.Next()
-			return
+	if interfaces, err := net.Interfaces(); err == nil {
+		for _, iface := range interfaces {
+			addrs, err := iface.Addrs()
+			if err != nil {
+				continue
+			}
+
+			for _, a := range addrs {
+				if ip, _, err := net.ParseCIDR(a.String()); err == nil {
+					ips = append(ips, ip.String())
+				}
+			}
 		}
 		}
+	}
+
+	return ips
+}
 
 
-		if addrPort, _ := netip.ParseAddrPort(c.Request.Host); addrPort.Addr().IsLoopback() {
+func allowedHostsMiddleware(addr net.Addr) gin.HandlerFunc {
+	return func(c *gin.Context) {
+		if addr == nil {
 			c.Next()
 			c.Next()
 			return
 			return
 		}
 		}
 
 
-		if addr, _ := netip.ParseAddr(c.Request.Host); addr.IsLoopback() {
+		addr, err := netip.ParseAddrPort(addr.String())
+		if err == nil && !addr.Addr().IsLoopback() {
 			c.Next()
 			c.Next()
 			return
 			return
 		}
 		}
@@ -956,6 +968,13 @@ func allowedHostsMiddleware(addr net.Addr) gin.HandlerFunc {
 			host = c.Request.Host
 			host = c.Request.Host
 		}
 		}
 
 
+		if addr, err := netip.ParseAddr(host); err == nil {
+			if addr.IsLoopback() || addr.IsPrivate() || slices.Contains(ips(), host) || addr.String() == "0.0.0.0" {
+				c.Next()
+				return
+			}
+		}
+
 		if allowedHost(host) {
 		if allowedHost(host) {
 			c.Next()
 			c.Next()
 			return
 			return