跳到主要内容

纯前端工具的攻击面到底在哪

· 2 分钟阅读
Connexion Collective
ADMIN 权限狗

「不上传、没后端,所以很安全」——这句话只对了一半。没有服务端确实砍掉了大半攻击面,但风险不会消失,它转移到了两个地方:访客的浏览器和依赖链。

先划掉不存在的风险​

因为没有服务器,所以这些都不成立:SQL 注入、越权访问、SSRF、上传接口被刷、后台被拖库。工具只处理访客自己选的文件,结果也只回到他自己的浏览器。

真正要防的四件事​

1. 供应链。 第三方包在构建时执行,能读仓库、能改产物。对策:锁定精确版本、提交 lockfile、优先选零依赖或依赖少的库、看清有没有 postinstall 脚本。二维码那个库我最终选了零依赖的 qrcode-generator,而不是带 pngjs、yargs 的 qrcode。

2. 解码器漏洞。 恶意图片可能触发 WASM 解码器的内存错误。影响面仅限于打开它的那个标签页——没有服务端,不会波及其他用户。对策:跟随上游版本,不自己魔改二进制。

3. 资源耗尽。 一张超大图能把手机标签页卡死。对策:单文件 25 MB、总像素 4000 万上限、批量 20 张、并发压到 2 张,超限自动等比缩放。

4. XSS。 文件名、二维码内容、用户输入都是不可信数据。对策:一律 textContent 或 Canvas 绘制,不拼 HTML;blob: 地址用完即回收。

怎么证明「真的没上传」​

不是靠嘴说,靠抓包:在无头浏览器里完整跑一遍压缩流程,记录所有请求的 host。结果只有本地静态服务器和 blob: 地址,没有任何外域请求;WASM 也确实来自本站 /wasm/。

一个附带的好处​

因为只有静态文件,Cloudflare Pages 那边几乎没有可被利用的配置项:不用配环境变量、不用开函数、不用管运行时版本。攻击面小到只剩下「构建产物 + 浏览器」。

经验​

安全不是「有没有后端」这一个维度。纯前端项目更容易被忽略的是依赖链和输入处理——这两块要按后端项目的标准来要求自己。

加载评论中...