可显示的文字,不一定适合直接点击
整理 Flux Art 素材时,自建审核工具可能允许同事粘贴参考网址,再自动显示“打开原图”。文字能作为备注保存,不代表它可以未经检查变成浏览器导航目标。应先确定支持哪些链接用途,再解析并核对协议与目标。本文讨论自建页面的链接准入设计,不进行服务端取图,也不把解析成功写成目标网站安全或素材授权已确认。
先决定是否接受相对地址
如果业务只需要外部公开参考链接,可以明确要求完整 HTTPS 地址;若允许相对路径,就必须指定可信基准,并说明它相对哪个页面或资源根解析。不能使用由用户控制的基准,也不能把两个字符串简单拼接当作解析。保存原输入供必要追溯时注意去敏,同时记录实际准备导航的规范化结果,防止界面展示一条地址而点击后使用另一条。
解析成功之后仍需业务判断
MDN 的 URL 构造器说明,无法形成有效 URL 时会抛出 TypeError,相对引用需要基准;有基准时解析也不是普通字符串拼接。依据见 https://developer.mozilla.org/en-US/docs/Web/API/URL/URL 。下面是假设准入表,不是真实安全测试。捕获解析错误后显示明确提示;解析成功再检查协议和业务目标范围,不能因为构造器返回对象就允许任何导航用途。
| 输入情况 | 判断依据 | 界面处理 |
|---|---|---|
| 完整公开地址 | 解析结果与允许协议 | 通过后才可点击 |
| 相对引用 | 是否有可信明确基准 | 不允许则提示补全 |
| 格式错误 | 构造器解析失败 | 保留不可点击文字 |
| 不允许协议 | 结构化protocol值 | 明确拒绝原因 |
| 限定素材域 | 规范化主机或源 | 范围外不放行 |
| 未决目标 | 业务用途与权限未知 | 标待补证 |
协议允许表要符合真实用途
对于只需要公开网页参考的入口,可把 HTTPS 作为明确允许项,其他协议按业务决定拒绝,而不是维护零散危险词黑名单。data、blob、邮件或本地文件等形式各有用途,但不应因别处支持就在此入口全部开放。检查解析后的 protocol 等结构化属性,不按原字符串是否包含某个词判断。本文给出防御设计思路,不提供执行性测试载荷,也不建议在生产尝试不可信协议。
需要域名限制时精确表达规则
若链接只应指向已登记的素材域,应比较解析后的规范化主机或源,并明确端口与子域规则。不要用“包含某个名称”代替匹配,也不要让用户信息部分或路径里的文字影响主机判断。允许 HTTPS 只说明协议满足要求,不保证目标在业务范围内。若业务允许任意公开参考站点,界面应诚实标注外部目标,而不是展示平台标志制造受信任站点的印象。
显示文本与导航地址分别处理
链接标题可以用纯文本显示用户备注,href 则只接收已经通过本入口规则的解析结果。不要把整段用户输入拼成 HTML,再靠视觉审查判断安全。若解析或准入失败,可以保留为不可点击的文字并说明原因;编辑之后必须重新检查,不能沿用先前通过的标签。目标地址含访问签名时,不应在公共列表、日志或错误截图中完整暴露,准入通过不等于适合公开分享。
用无害边界样例检验规则
假设测试集中包含完整 HTTPS 地址、按约定解析的相对路径、格式错误的文字和本入口不允许的协议形式。这是假设验收方案,不是真实攻击事件。逐项记录原输入类型、解析后的协议与主机、允许或拒绝原因,以及最终界面是否可点击。再测试修改已有记录和从历史数据重新载入,确认没有绕过检查的旧入口。样例只用受控公开测试地址,不接触内网或第三方私有资源。
不要把前端链接检查扩张成抓取许可
如果后续功能要由服务器代取图片,必须另行设计服务端目标限制、解析与网络边界;浏览器 href 规则不能替代 SSRF 防护。点击后的重定向也可能改变最终目标,若任务要求固定来源,应采用相应受控流程,不能声称初始地址允许就保证所有后续页面。未知目标保留待补证,相关检查应在有权限的环境中执行,不因为是素材排障而无限追踪任意地址。
交接规则版本与拒绝理由
建议交付入口用途、基准规则、允许协议、主机范围、显示方式和边界样例结果,并绑定实际组件版本。技术依据核对于2026年11月10日,本文未替读者实施安全测试。Flux Art 创作入口见 https://flux-art.net/zh ,接口接入见 https://flux-art.net/zh/openapi 。平台素材生成、自建链接展示和服务器资源获取是不同环节,分别验收才能让同事清楚哪些地址可用、哪些仍需确认。