SSRF 防御方法

1. 验证用户输入的 URL

任何由用户提供的 URL,在服务端发起请求前,都必须经过严格的验证

  • 白名单验证:这是最安全的方法。只允许用户请求预先定义好的、可信的 URL 或 IP 地址。如果用户输入的 URL不在白名单中,就直接拒绝请求
  • 黑名单过滤:过滤掉一些危险的 IP 地址、域名或端口。例如,过滤掉 127.0.0.1localhost10.0.0.0/8172.16.0.0/12192.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 攻击
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:13:22

results matching ""

    No results matching ""