AI SDK 如何校验 Provider 响应中的 URL 以防止 SSRF 攻击

发布时间:2026/9/13 20:13:05

AI SDK 如何校验 Provider 响应中的 URL 以防止 SSRF 攻击 AI SDK 如何校验 Provider 响应中的 URL 以防止 SSRF 攻击【免费下载链接】aiThe AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and agents项目地址: https://gitcode.com/GitHub_Trending/ai/ai很多 AI Provider 会在响应体里返回一个 URL——待下载的生成图片、音频、视频或者用于轮询任务状态的地址。AI SDK 会在服务端代你抓取这些 URL 并把结果交回你的代码。由于 URL 来自外部服务一个被攻破或被篡改的 Provider 可以把它指向云元数据端点如http://169.254.169.254/…、内网主机http://10.0.0.5/…或localhost从而让你的服务器发起针对内网的请求即 SSRF 攻击。AI SDK 的应对方式是在抓取之前校验每一个来自响应的 URL。这件事在 Provider 包内部自动发生你不需要配置任何东西。本文说明校验覆盖了哪些环节、被拦截的 URL 在你的代码里如何表现、非 Node.js 运行时的限制以及如何按官方建议进一步加固部署。SDK 自动校验的内容当 SDK 抓取一个取自 Provider 响应的 URL 时会执行以下检查完整说明见 Secure URL Fetching 文档拒绝私有、环回和链路本地目标——IPv4 的10/8、172.16/12、192.168/16、127/8、169.254/16、CGNAT、多播等区间及对应的 IPv6 区间外加localhost和.local域名非http(s)协议同样被拒绝。对每一个重定向跳重新校验——一个 URL 本身合法、随后重定向到内网地址的情况会被拦截SDK 不会盲目跟随重定向。在 Node.js 上于连接时校验 DNS——每一个解析出的地址都会被检查并且 socket 会被固定到已校验的 DNS 结果上因此 DNS rebinding 无法在校验与连接之间引入另一个地址。剥离高危请求头——代理转发、云元数据和 Cookie 类请求头在发出请求前被移除。跨源丢弃凭据——调用方请求头Authorization、Cookie以及各 Provider 的 API-key 头不会发往与 Provider 不同源的宿主跨源重定向会丢弃除 user-agent 以外的全部这些头。被拦截的 URL 会以DownloadError的形式抛到你的代码中。两个需要注意的例外路径自托管与本地端点。与你配置的 Provider 端点同源的 URL例如自定义baseURL指向自托管或localhost部署会豁免上述检查——它指向的正是你明确要求 SDK 访问的主机任务状态轮询同样适用。任何离开该源的重定向仍会在发出前被校验。带认证的任务状态轮询。Provider 可以从你配置的 API 端点构造第一个 URL。SDK 对初始请求信任这个已配置的源但会手动跟随并校验之后离开该源的每一个重定向。文档指出 MiniMax、Kling AI 和 ByteDance 的视频轮询走的就是这条受保护路径。在代码中识别被拦截的下载校验拦截、下载失败、超出大小限制等情况统一表现为DownloadError。你可以用静态方法isInstance判断并单独处理完整属性说明见 AI_DownloadError 参考import { DownloadError } from ai; if (DownloadError.isInstance(error)) { // error.url —— 下载失败的 URL // error.statusCode / error.statusText —— 服务端返回的状态码与状态文本可选 // error.cause —— 导致下载失败的底层错误可选 // error.message —— 下载失败详情自动生成可选 }例如语音转写场景传入 URL 时audio: new URL(https://example.com/audio.mp3)SDK 默认以 2 GiB 大小限制下载超限时抛出的就是DownloadError可以按上面的方式捕获并记录error.message。这也是判断URL 被安全校验拦截与普通网络错误的实际落点。非 Node.js 运行时的差异默认行为针对 Node.js校验用的下载 fetch 通过node:dns与undici连接器钩子在连接时校验每一个解析出的地址连接器直接使用这些结果建立连接同时堵死 hostname-to-private-IP 和 DNS rebinding 两类绕过。由此推出两条部署约束如果你注入或全局替换了fetch等价的 DNS 校验与连接固定由你的实现负责SDK 不再替你兜底。其他运行时不暴露 Node 的 DNS/socket 钩子在这些运行时部署服务端时应当用网络层手段限制到私有、环回、链路本地和云元数据区间的出站流量。进一步加固部署官方建议对服务端会抓取 Provider 返回的 URL的部署尽量同时采用以下两种方式完整命令与代码见 Secure URL Fetching 文档方式一在网络层限制出站流量在服务器的网络层拒绝发往169.254.0.0/16、RFC-1918 区间和环回地址的出站流量。文档明确指出这是最稳健的控制手段因为它独立于应用代码——即使应用层校验出现缺口流量也出不去。方式二加固注入的fetchNode.js 默认路径已经做了连接期固定如果你注入或全局替换了fetch官方文档给出的做法是用一个undiciAgent承载它在connect.lookup中校验解析出的 IP只允许连接安全地址。文档示例代码如下import { Agent, fetch as undiciFetch } from undici; import { lookup } from node:dns; // Your own check that returns true for private/loopback/link-local addresses. declare function isUnsafeAddress(ip: string): boolean; const safeLookup: typeof lookup (hostname, options, callback) { lookup(hostname, options as any, (err, address, family) { if (!err typeof address string isUnsafeAddress(address)) { callback(new Error(Refusing to connect to ${address}), , 0); return; } (callback as any)(err, address, family); }); }; const safeDispatcher new Agent({ connect: { lookup: safeLookup } }); const safeFetch: typeof fetch (input, init) undiciFetch(input, { ...init, dispatcher: safeDispatcher }) as any;注意示例中的isUnsafeAddress是一个需要你自己实现的判断函数契约如文档注释所述对私有/环回/链路本地地址返回true。其余代码可直接使用。然后把safeFetch传给 Provider 构造函数例如import { createFal } from ai-sdk/fal; const fal createFal({ fetch: safeFetch });最后一条原则SDK 的 URL 校验与你自定义 fetch 的连接期固定是互补关系文档明确要求两者都保留。边界与延伸阅读校验只针对URL 来自响应体的场景主机固定由你的配置决定的请求validateUrl: false路径不会触发这条校验链。如果你在开发 Provider 包validateUrl、trustedOrigin、credentialedOrigin的取舍规则见仓库内的 Secure URL handling 贡献指南。实现入口在核心包的下载工具 download.ts它调用ai-sdk/provider-utils的fetchWithValidatedRedirects完成带重定向校验的抓取相关实现位于 packages/provider-utils。对自托管含localhost的 Replicate 兼容服务端、内部 fal 部署用户你的端点天然与配置的baseURL同源不会被误拦但离开该源的任何重定向仍会被校验遇到DownloadError时应先确认 Provider 是否返回了异常的重定向目标。【免费下载链接】aiThe AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and agents项目地址: https://gitcode.com/GitHub_Trending/ai/ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/13 20:13:05

bd template 命令详解:用 Beads 模板系统统一 issue 创建规范

bd template 命令详解:用 Beads 模板系统统一 issue 创建规范 【免费下载链接】beads Beads - A memory upgrade for your coding agent 项目地址: https://gitcode.com/GitHub_Trending/beads1/beads Beads 的 bd template 命令体系用于管理 issue 模板&…

2026/9/13 20:58:08

UART协议详解:从异步通信原理到串口实战排错

UART的全称是Universal Asynchronous Receiver/Transmitter,中文叫通用异步收发器,它对应的通信方式,就是嵌入式领域最常见的那种异步串行通信。我当年对串口的第一印象很朴素:把一根杜邦线从单片机TXD接到另一块板的RXD&#xff…

2026/9/13 20:58:08

一维振动信号转二维图像的故障诊断方法

简介:本资源是一套面向工业智能诊断领域的Matlab实现工具包,专为高校研究者、自动化工程师及深度学习初学者设计,解决一维传感器时序信号难以直接输入主流图像型深度学习模型的关键问题。核心方法为暂态提取变换(TET)&…

2026/9/13 20:58:08

Python语音处理:用librosa提取MFCC特征完整指南

简介:面向音频处理与机器学习入门者的MFCC特征提取示例代码包,使用Python语言和librosa库实现,可直接运行并生成直观的梅尔频率倒谱图。程序能够读取wav格式音频,计算梅尔频率倒谱系数,并将结果以谱图形式呈现&#xf…

2026/9/13 20:58:08

2025嵌入式面试高频考点全解析:C语言、Linux与RTOS核心追问

这几年带过不少候选人,也帮好几拨师弟师妹突击过嵌入式开发岗位的面试,一个很直观的感受是:2025年的嵌入式面试,和三五年前完全不是一个打法了。面试官不再满足于让你背几个C语言修饰符的解释,而是直接把一块开发板、一…

2026/9/13 20:58:08

BIM 可视化技术在房地产和工程领域的应用

BIM(建筑信息模型)技术正在深刻改变建筑行业,而 BIM 可视化是 BIM 技术最直观、最有价值的应用方向之一。通过将 BIM 模型转化为逼真的三维可视化内容,可以服务于设计沟通、施工管理、营销展示、运营维护等全生命周期。本文全面解…

2026/9/13 20:53:07

Matlab在售电公司购售电策略优化中的应用

1. 项目背景与核心价值在能源结构转型的大背景下,售电公司作为连接发电侧与用户侧的关键纽带,其购售电策略直接影响着运营效益和市场稳定性。传统策略往往将可再生能源输出视为固定值,而实际上光伏、风电等清洁能源存在显著的预测误差&#x…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码