SuperAPI AI 工具集

security-bun

安全与审计

查看项目

更新于 10-15 13:51

技能介绍

用途

本技能用于审计 Bun 运行时应用的安全问题,重点关注 Shell 注入、SQL 注入、服务器安全以及 Bun 特有的漏洞模式。它帮助开发者识别并修复在 Bun 环境中容易出现的危险写法,适用于代码审查、安全测试和加固流程。

主要能力

技能围绕多个 Bun 特性提供对照示例,说明安全与不安全用法。

Shell 与命令执行

Bun 的 $ 是标签模板,默认会转义。若以函数形式调用或开启 raw 模式,用户输入可能变成命令注入。示例中展示 await $echo ${userInput} 是安全的,而 `await $`bash -c "echo ${userInput}" 会绕过转义。即使使用安全的标签模板,也可能受到参数注入影响:以 -- 开头的输入会被解释为命令行参数,需要验证输入格式或使用 -- 结束参数解析。Bun.spawn() 同样存在风险,包含用户输入的数组或 shell 执行都可能危险,应先验证输入或用 -- 防止标志注入。

SQL 注入

Bun 的 sql 是标签模板,会对值参数化。若以函数调用形式 sql(...) 或手动拼接 SQL 字符串,会造成 SQL 注入。bun:sqlite 的 Database 类中,字符串插值同样危险,应使用 .run() 的参数化、预处理语句或带参数的 query()。

服务器安全

Bun.serve() 中若缺少请求校验,可能出现路径穿越(如直接拼接上传文件名)。应使用 basename()、resolve()、join() 进行清理并验证路径是否位于允许目录内。还应设置 maxRequestBodySize 防止大请求耗尽内存。CORS 配置不宜同时使用 Access-Control-Allow-Origin: * 和 Access-Control-Allow-Credentials: true,应使用明确的来源允许列表。主机绑定方面,开发时建议使用 127.0.0.1,避免无意暴露到网络。

文件与密码

Bun.file() 和 Bun.write() 若直接使用用户输入,可能造成路径穿越或任意路径写入,需要通过 basename() 和路径验证来清理。Bun.password.hash 和 Bun.password.verify 默认安全(使用 argon2),但需确认实际存储的是哈希而非明文。

环境变量与配置

Bun.env 与 process.env 相同,需注意密钥不应出现在客户端代码或被捆绑打包。bunfig.toml 中禁用锁文件或允许任意注册表可能带来供应链风险。

WebSocket

server.upgrade() 前应进行认证,否则未授权连接可能进入消息处理或广播逻辑。示例展示了在升级前验证 token 并在 ws.data 中保存用户信息。

使用方式

技能提供常见漏洞的严重性表、快速审计命令和加固检查清单。审计命令使用 rg 搜索危险模式,例如函数形式的 $ 或 sql、SQL 字符串插值、Bun.spawn、Bun.file 带变量、hostname: "0.0.0.0"、CORS 头、server.upgrade 等。加固检查清单涵盖标签模板用法、参数化查询、输入验证、路径清理、CORS 限制、主机绑定、WebSocket 认证、密码哈希和 bunfig.toml 审查。

适用场景

适用于使用 Bun 运行时的后端服务、API、WebSocket 服务、脚本和数据库操作的安全审计,尤其适合代码审查阶段快速定位 Bun 特有风险。

限制

技能内容为安全审计模式与示例,未提供自动修复工具或完整扫描器。部分示例标记为“if applicable”或“check usage”,需要结合实际环境判断。具体 Bun 版本行为、平台差异及未在资料中提及的配置细节暂未提供。