← 返回题目列表

什么是 SSRF?服务器端请求伪造如何防范?

高频 中等 第 8 / 27 题 更新于 2026/07/28
SSRF网络安全内网攻击白名单

简化版

SSRF(Server-Side Request Forgery,服务器端请求伪造)是攻击者诱导服务器去访问一个由攻击者指定的地址,从而借服务器之手探测/访问内网(那些外部访问不到、但服务器能访问的资源)。常见于「填个 URL 让服务器去拉取」的功能(图片抓取、URL 预览、webhook)。危害是打穿内外网边界——外部攻击者透过服务器摸到了内网。防范核心:严格校验目标地址(白名单)、禁止访问内网 IP

详细版

攻击原理:很多功能需要「服务器根据用户给的 URL 去发起请求」,比如:

  • 「输入图片 URL,我帮你下载/生成缩略图」;
  • 「输入网址,我帮你抓取标题做预览卡片」;
  • 分享、webhook 回调、导入远程文件等。

如果服务器不校验这个 URL,攻击者就把 URL 换成内网地址,让服务器去访问它拿不到的东西:

正常:http://example.com/fetch?url=https://img.site.com/a.png
攻击:http://example.com/fetch?url=http://192.168.1.1/admin
攻击:http://example.com/fetch?url=http://169.254.169.254/latest/meta-data/  ← 云服务器元数据

服务器在内网里、有内网访问权限,于是替攻击者访问了内网管理后台、数据库、甚至云主机的元数据服务(可能泄露密钥、临时凭证)。

危害:探测内网存活主机和端口、访问内网未授权服务、读取云元数据窃取凭证、配合其他漏洞进一步渗透。

防范手段

  • URL 白名单:只允许访问明确许可的域名/地址,其余一律拒绝;
  • 禁止内网地址:解析目标 IP,禁止访问私有网段(10/172.16-31/192.168)、回环(127.0.0.1)、169.254.x(元数据)等;
  • 限制协议:只允许 http/https,禁止 file://gopher://dict:// 等危险协议;
  • 禁止跟随重定向:或对重定向后的地址再次校验(防绕过);
  • 网络隔离:发起外部请求的服务放在能访问外网但访问不到敏感内网的隔离区。

完整版教学

一、SSRF 的本质:借服务器之手打内网

理解 SSRF 的钥匙是**「谁去发的请求」**:

  • CSRF 是「借用户浏览器之手」发请求(详见「CSRF」那道题);
  • SSRF 是「借服务器之手」发请求。

为什么「借服务器之手」这么危险?因为服务器的网络位置和权限,和外部攻击者完全不同

  • 服务器往往在内网里,能访问大量外部访问不到的内部服务(数据库、管理后台、其他微服务、缓存);
  • 服务器可能有访问云元数据服务169.254.169.254)的权限,那里藏着云主机的密钥、临时凭证。

外部攻击者本来碰不到这些,但通过 SSRF,他把服务器变成了自己的「内网代理」——服务器帮他访问、并把结果返回。这就打穿了「内外网隔离」这道核心防线。

二、云环境下的元数据服务:SSRF 的重灾区

现代云服务器(AWS、阿里云等)都有一个元数据服务,通过固定的内网地址 169.254.169.254 访问,提供实例信息,甚至临时访问凭证(AccessKey)

这个地址只有云主机自己能访问,本意是方便应用获取自身信息。但一旦有 SSRF,攻击者就能让服务器去请求:

http://169.254.169.254/latest/meta-data/iam/security-credentials/

拿到云账号的临时凭证,攻击者就能接管云资源(读写对象存储、操控云服务器),危害极大。所以云环境的 SSRF 尤其致命——历史上多起重大云安全事件都源于此。防御时必须显式禁止访问 169.254.x 元数据地址

三、防御一:白名单,而非黑名单

SSRF 防御的核心是校验目标地址,而校验要用白名单而非黑名单:

  • 黑名单(不推荐):试图列出所有禁止的地址(内网段、元数据…)。问题是绕过手段太多——攻击者用各种 IP 写法(十进制 2130706433 = 127.0.0.1、八进制、0x 十六进制)、DNS 重绑定、短链接、@ 混淆 URL 等躲过黑名单;
  • 白名单(推荐):只允许访问明确列出的可信域名/地址,其余全拒。这样绕过再花哨,不在白名单里就进不来。

如果业务确实无法用白名单(如允许用户填任意外部图片),就要解析出真实目标 IP 后严格校验——把 URL 解析成 IP,检查它是不是内网/回环/元数据地址,是则拒绝。

四、防御二:解析校验 + 防重定向绕过

只校验 URL 字符串不够,攻击者能用重定向和 DNS 绕过:

  • DNS 重绑定:攻击者的域名第一次解析成外网 IP(通过校验),服务器真正发请求时再解析成内网 IP(TOCTOU 时间差)。防御要在实际发起连接的那一刻校验 IP,或校验后用固定 IP 连接;
  • 重定向绕过:白名单域名返回一个 302 重定向到内网地址。防御要禁止跟随重定向,或对每一跳重定向后的地址都重新校验;
  • 协议限制:禁止 file://(读本地文件)、gopher://(能构造任意 TCP 数据、打内网 Redis/MySQL)等,只允许 http/https。

五、纵深防御:网络层面隔离

代码层校验是主防线,但网络架构层面的隔离是重要兜底:

  • 把「需要发起外部请求的服务」放在一个独立的隔离网段,让它只能访问外网、访问不到敏感内网(数据库、管理后台、元数据);
  • 用防火墙/安全组限制这个服务的出站访问范围;
  • 对云元数据服务加固(如 AWS 的 IMDSv2 要求带 token 访问,抵御简单 SSRF)。

这样即使代码校验被绕过,攻击者透过服务器也访问不到敏感资源。

六、常见误区

  • ❌ 把 SSRF 和 CSRF 混——CSRF 借用户浏览器发请求,SSRF 借服务器发请求打内网。
  • ❌ 用黑名单防 SSRF——IP 写法/重定向/DNS 重绑定绕过太多,要用白名单。
  • ❌ 忘了云元数据服务——169.254.169.254 能泄露云凭证,是 SSRF 重灾区,必须禁止。
  • ❌ 只校验 URL 字符串——要解析真实 IP 校验、禁重定向、限协议,防绕过。

六、常见误区与追问

考点正确口径
攻击目标让服务器代替攻击者访问内部或敏感地址
高危地址内网服务、云元数据、localhost、文件协议
防护白名单、解析后校验、禁内网、禁跳转、网络隔离
attacker input: http://169.254.169.254/latest/meta-data/
server fetches URL from backend network
metadata service returns credentials
attacker receives sensitive data

SSRF 危险在于请求从服务器发出,它拥有攻击者没有的网络位置和权限。

  • 误区:只禁止 localhost 就能防 SSRF。 还要禁止内网段、链路本地地址、IPv6 本地地址、DNS 重绑定和跳转绕过。
  • 误区:校验字符串前缀就够。 URL 编码、用户信息段、重定向、短域名和解析变化都可能绕过。
  • 误区:SSRF 只能读 HTTP。 部分组件支持 file、gopher、ftp 等协议,可能扩大攻击面。
  • 追问:DNS 重绑定怎么绕过? 首次解析是公网 IP,后续解析变内网 IP;防护要在连接前解析并校验最终 IP。
  • 追问:云环境 SSRF 为什么危险? 可能访问云元数据服务获取临时凭证,进一步控制云资源。
  • 追问:工程上如何防? 使用固定域名白名单、禁跟随跳转、限制协议、解析后校验 IP,并通过网络 ACL 隔离敏感服务。

七、加强记忆

SSRF 是诱导服务器去访问攻击者指定的地址(常见于「填 URL 让服务器抓取」的功能),借服务器之手打穿内外网边界——访问内网服务、读云元数据(169.254.169.254)窃取凭证。防范核心是白名单校验目标地址、禁止内网/回环/元数据 IP、限 http(s) 协议、禁跟随重定向、在连接时刻校验 IP 防 DNS 重绑定,再配合网络隔离兜底。它和 CSRF 的区别:SSRF 借服务器、CSRF 借浏览器。