尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

SSRF防御别只做域名黑名单:真正要守住的是出站边界

SSRF防御别只做域名黑名单:真正要守住的是出站边界 很多SSRF修复最后都会变成一份越来越长的黑名单禁止localhost禁止127.0.0.1再禁止云元数据地址。上线后看似安全下一次代码审计却仍然能找到绕过路径。根本原因是系统把“用户可以提交一个URL”当成业务需求却没有定义服务器究竟被允许访问哪些目的地。黑名单是在追逐输入形式真正需要建立的是出站访问边界。先问业务真的需要完整URL吗头像抓取、Webhook测试、文件转存和网页预览经常接收URL。如果实际只允许访问几个合作方接口没有必要接受任意协议、任意域名和任意端口。更稳的设计是让客户端提交资源ID、供应商编号或预定义目标由服务端映射成固定地址。例如用户选择“仓库A”服务端从配置中读取仓库A的API地址而不是让用户提交https://任意地址/path。当业务必须接收URL时也应明确允许的协议、主机、端口、路径和重定向行为。允许列表要尽量表达业务身份而不是简单判断字符串是否“看起来像公网域名”。URL必须交给标准解析器不要用字符串前缀、包含关系或正则表达式自行拆URL。用户名段、大小写、编码、尾点、IPv6括号和不同解析器之间的差异都可能让验证逻辑与实际发请求的组件得出不同结论。安全流程应使用与HTTP客户端语义一致的标准URL解析器取出规范化后的scheme、hostname和port再逐项验证。通常只允许https必要时允许http应拒绝file、gopher等业务不需要的scheme并限制非常规端口。解析失败必须关闭请求而不是回退到宽松模式。校验域名还不够要校验解析后的全部地址一个允许的域名可能解析到多个IPv4或IPv6地址。防护逻辑需要检查全部候选地址拒绝回环、链路本地、私有网段、组播、未指定地址以及企业内部保留网段。只检查127.0.0.1不够因为回环地址是一个网段只检查IPv4也不够因为客户端可能优先连接IPv6。云环境还应保护元数据服务和控制面地址例如常见的链路本地元数据地址169.254.169.254但不能把这一条地址当成完整防线。这里还有一个容易忽略的问题校验时解析到公网IP真正连接时再次解析却变成内网IP也就是DNS重绑定风险。可行的工程方案包括让受控解析器返回已校验地址并让HTTP客户端连接该地址同时正确设置TLS主机名验证和Host语义。具体实现必须使用成熟客户端能力避免自己拼装出新的证书校验漏洞。每一次重定向都要重新判断初始URL合法不代表重定向目标也合法。HTTP客户端若自动跟随302攻击者可能先提供一个允许域名再把请求转向内部地址。高风险功能可以直接关闭自动重定向。业务确实需要跳转时要限制次数并对每一跳重新执行协议检查、主机允许列表、DNS解析、IP范围、端口和凭证策略。不能只验证第一跳。授权头、Cookie和内部认证信息也不应自动带到新的主机。否则即使目标没有进入内网也可能造成凭证泄露。用网络层限制应用能去哪里应用校验总有出现缺陷的可能。第二道防线应该放在网络层默认限制工作负载的出站访问通过受控出站代理访问互联网在代理层实施域名、地址、端口和协议策略单独阻断云元数据、管理网、数据库网段和控制面为不同应用分配不同出站权限而不是共享一张“大网通行证”。Kubernetes环境可以结合NetworkPolicy、服务网格或专用出口网关云环境还应使用平台提供的元数据服务保护机制。应用层与网络层同时失效才会真正触达敏感目标这就是纵深防御的意义。超时、响应大小和内容类型也是边界SSRF不只有“读取内网接口”一种后果。无限等待会占满线程超大响应会消耗内存和带宽访问慢速目标可能形成资源耗尽。请求组件应设置连接超时、读取超时、最大响应体、允许的内容类型和并发上限。对网页预览功能通常没有必要把上百兆文件完整下载到内存对图片转存应在解码前检查长度并在解码后限制像素尺寸。日志要能回答服务器访问了什么建议记录规范化目标、解析后的地址范围分类、最终连接地址、重定向次数、响应状态、耗时、响应大小和策略拒绝原因。注意不要把URL中的凭证、令牌或敏感查询参数原样写入日志。告警可以关注访问私有或链路本地地址的拒绝事件、短时间大量不同目标、非常规端口、重定向跨域以及同一用户连续触发解析失败。日志既用于发现攻击也用于确认新规则是否误伤正常业务。代码审计时的六层检查能否用业务ID替代任意URLURL是否由标准解析器处理协议、主机和端口是否使用允许列表DNS解析后的全部IPv4、IPv6地址是否校验每次重定向是否重新校验凭证是否跨域传播网络出口是否默认受限并有可审计日志。SSRF防御的目标不是识别所有“坏字符串”而是让服务器只能访问完成业务所必需的目标。边界越靠近业务语义规则越短也越难被输入变形绕过。如果你正在学习Web渗透、代码审计和云上防御可以把这六层检查分别落到一个隔离练习项目中再验证每层失效时下一层能否阻断。相关网络安全课程入口可在这里查看。
返回列表