Sunday面试指南

SSRF 是什么?为什么后端不能直接请求用户传入的 URL?

下面是一段教学用的模拟面试。

🧑‍💻 面试官:SSRF 是什么?

🙋‍♂️ 我:攻击者让服务器请求本来不该访问的地址。

🧑‍💻 面试官:用户上传图片 URL,后端帮忙下载,为什么也有风险?

🙋‍♂️ 我:服务器能访问浏览器访问不到的内部资源。

🧑‍💻 面试官:只允许 https,再拒绝 localhost,够吗?重定向和 DNS 变化以后呢?

防护不只看 URL 字符串,还要控制「服务器最终连接到哪里」。输入、解析、跳转和出站网络一起检查。

面试速答(60 秒版)

SSRF 是服务端请求伪造。攻击者控制目标,让服务器利用自己的网络位置或凭证访问不应开放的资源。

比如后端根据用户 URL 下载图片,若没有限制,就可能访问内部服务或敏感基础设施。只允许 https、过滤 localhost,不足以完整防护。

如果业务只访问固定服务,我会采用明确的目标允许名单。确实允许外部 URL 时,使用标准解析器,限制协议、端口和实际地址,处理 IPv4/IPv6、DNS 与每次重定向。

同时通过出站代理或网络策略限制可达范围,控制超时、大小和凭证转发。校验与实际连接不能各用不同目标,避免“检查安全,连接危险”。

用户给 URL,服务器借出网络能力

图:用户给 URL,服务器借出网络能力。

知识点详解:为什么替用户下载会扩大访问能力?

浏览器与服务器,网络能力不同

假设业务允许提交封面 URL,后端下载并保存。用户只决定 URL,真正执行请求的却是服务器。

服务器可能位于内网,能够访问管理接口、内部 HTTP 服务或云环境资源。普通下载功能,就可能把这种网络能力借给不可信输入。

不必执行系统命令才成立。服务端按攻击者控制目标发起不适当请求,就可能形成 SSRF。

固定目标场景,先收窄需求

只需访问几个合作服务,就不必开放任意 URL。可以让用户提供资源 ID,由后端使用固定目标构造请求;或者维护经过验证的域名、端口和路径范围。

明确允许范围,比不断追加危险字符串黑名单更容易检查。但仍要处理解析、跳转与认证边界,名单不是唯一防线。

外部 URL,要检查最终连接目标

使用标准 URL 解析器,拒绝不需要的协议、用户信息和端口。解析域名后,判断实际 IP 是否属于禁止范围,包括回环、私网、链路本地等,并正确处理 IPv4 与 IPv6。

HTTP 客户端若自动重定向,下一跳也要检查;或者按业务禁止跳转。原地址安全,不代表跳转后也安全。

DNS 结果可能变化。校验时解析一个结果,连接时再解析另一个结果,会导致检查与使用脱节。通过受控连接或出站代理,让已验证目标与实际连接一致,同时正确维护 TLS 主机验证。

原则可以核对 OWASP SSRF 防护指南。

检查通过的目标,要与连接一致

图:检查通过的目标,要与连接一致。

网络边界,为什么仍然必要?

应用层解析复杂,也可能遗漏。出站网络策略可进一步限制下载服务的可达范围,禁止不需要的内部目标。

这类功能最好运行在权限和网络能力更小的环境。它不需要的内部服务,不应该默认可达。

不要向用户目标转发业务 Cookie 或 Authorization。不同来源跳转尤其要注意。超时、响应大小与内容处理也需要限制,防止资源消耗。

验证整个请求链,而不只验证函数

在授权测试环境覆盖禁止地址、DNS 多地址、IPv6、跳转和超大响应,确认没有实际连接被禁止目标。

记录拒绝原因与真实出站目标,避免只显示“URL 校验通过”。同时验证合法业务仍可用。

不提供几行正则作为完整 TS/Python 防护。实际方案需要匹配 HTTP 客户端、DNS、代理和部署,不能让简化示例冒充可上线安全实现。

应用校验与出站策略,两道边界

图:应用校验与出站策略,两道边界。

面试官继续追问

限制返回类型为图片,能解决吗?

不能。请求可能已到敏感目标,响应类型是后续检查。先限制去向。

HTTPS 就代表可信?

不代表。它保护连接与身份验证,不说明目标符合业务权限。

禁止内网访问影响业务怎么办?

按服务职责划分访问范围。内部访问服务与任意外部 URL 下载器,不应共用过宽权限。

面试速记卡

  • SSRF:不可信输入借用服务器请求能力。
  • 目标:验证最终连接,不只匹配 URL 文本。
  • 跳转与 DNS:每次变化都纳入控制。
  • 网络:出站策略与低权限形成第二道边界。
  • 资源:超时、大小、凭证和响应处理一起限制。

公司面试真题

这道题暂未收录可核验的公司真题来源。你可以先阅读本文解析,或浏览已收录的公司面试真题。

浏览公司面试真题 →
简历汪永久免费在线制作简历,模板直接套用、导出无水印,永久免费、下载免费,不需要付费解锁任何功能。去写简历