允许80、443以外的端口

This commit is contained in:
2026-04-09 17:10:15 +08:00
parent 3715b03fab
commit 7ab7db9b76
+2 -11
View File
@@ -394,28 +394,19 @@ func mustParseCIDR(s string) *net.IPNet {
return network return network
} }
// isSafeRedirect 检查重定向目标是否安全(非内网 IP、非非标端口)。 // isSafeRedirect 检查重定向目标是否安全(非内网 IP)。
// 用于防止 SSRF 攻击:恶意服务器将爬虫重定向到内网服务。 // 用于防止 SSRF 攻击:恶意服务器将爬虫重定向到内网服务。
func isSafeRedirect(u *url.URL) error { func isSafeRedirect(u *url.URL) error {
host := u.Hostname() host := u.Hostname()
port := u.Port()
// 解析 IP 地址 // 解析 IP 地址
ip := net.ParseIP(host) ip := net.ParseIP(host)
if ip == nil { if ip == nil {
// 域名(非 IP),允许(DNS 解析由系统处理) // 域名(非 IP),允许(DNS 解析由系统处理,端口不限
// 但非标端口仍需检查
if port != "" && port != "80" && port != "443" {
return fmt.Errorf("blocked: non-standard port %s", port)
}
return nil return nil
} }
// IP 直连:检查是否为私有地址 // IP 直连:检查是否为私有地址
if isPrivateIP(ip) { if isPrivateIP(ip) {
return fmt.Errorf("blocked: private IP %s", ip) return fmt.Errorf("blocked: private IP %s", ip)
} }
// 非标端口检查
if port != "" && port != "80" && port != "443" {
return fmt.Errorf("blocked: non-standard port %s", port)
}
return nil return nil
} }