Files
2025-09-25 03:32:26 +08:00

41 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### SSRF 防御方法
**1. 验证用户输入的 URL**
任何由用户提供的 URL,在服务端发起请求前,都必须经过严格的验证
- **白名单验证**:这是最安全的方法。只允许用户请求预先定义好的、可信的 URL 或 IP 地址。如果用户输入的 URL不在白名单中,就直接拒绝请求
- **黑名单过滤**:过滤掉一些危险的 IP 地址、域名或端口。例如,过滤掉 `127.0.0.1``localhost``10.0.0.0/8``172.16.0.0/12``192.168.0.0/16` 等内网 IP 地址,以及一些高危端口如 `22`SSH)、`3306`(MySQL)等。但是,黑名单很容易被绕过,不推荐作为唯一的防御手段
**2. 禁止 URL 重定向**
许多 SSRF 攻击利用了 URL 重定向。攻击者可以提供一个外部 URL,当服务器访问它时,会被重定向到内网地址
- **防御方法**:在服务端代码中,**禁止自动处理URL重定向**。如果需要,应该手动检查重定向后的 URL 是否符合安全策略,例如是否指向了内网地址
**3. 对返回内容进行处理**
即使攻击者成功利用了 SSRF 漏洞,我们也可以通过限制返回内容来降低风险
- **过滤敏感信息**:在将请求的返回内容展示给用户之前,过滤掉敏感信息,例如内网服务的详细报错信息、版本号等
- **统一错误页面**:如果请求失败,只返回一个通用的错误页面,而不透露任何内部信息
**4. 最小权限原则**
运行服务的用户和网络权限应该被严格控制
- **网络权限**:如果某个服务不需要访问内网资源,可以在防火墙或安全组上设置规则,**禁止其访问内网 IP**
- **服务权限**:如果某个服务只需要访问特定的外部域名,可以配置 DNS 或主机文件,将该域名解析到特定的 IP 地址,防止解析到其他恶意 IP
**5. 使用 DNS Rebinding 防御**
DNS Rebinding 是一种高级的 SSRF 攻击,攻击者利用 DNS 解析的特性,让服务器第一次解析时返回一个外部 IP,第二次解析时返回一个内网 IP,从而绕过防火墙的检测
- **防御方法**:在服务端发起请求时,首先将域名解析为 IP 地址,然后**将该 IP 地址与白名单进行比对**。在后续的请求中,都只使用这个已验证的 IP 地址,而不再次进行 DNS 解析
**6. 使用专门的 URL 请求库**
使用安全的 URL 请求库,这些库通常会提供更高级的 SSRF 防御功能,例如:
- **内置的 IP 地址校验**:可以自动识别并阻止对私有 IP 地址的请求
- **强制使用 IP 地址**:可以配置为只接受 IP 地址作为请求目标,而不是域名,从而避免 DNS Rebinding 攻击