SuperAPI AI 工具集

scan-security

安全与审计

查看项目

更新于 10-16 07:30

技能介绍

用途

scan-security 用于通过基于 OWASP Top 10 的静态模式匹配,检测代码中的安全漏洞。它不会自动修复问题,只报告疑似项(suspected items)。对应规则文件为 security.md。

主要能力

该技能覆盖以下验证类别:

  1. 硬编码密钥(Hardcoded Secrets):检测直接嵌入代码中的密码、API 密钥和令牌。搜索模式包括 API_KEY、password、secret、token、PRIVATE_KEY、aws_access_key_id、aws_secret_access_key 等赋值形式。严重级别:CRITICAL。

  2. SQL 注入(SQL Injection):检测通过字符串插值构建 SQL 查询的模式,如 f"SELECT、f"INSERT、f"UPDATE、f"DELETE、f"DROP、模板字面量中的 SQL、字符串拼接的 SQL。严重级别:CRITICAL。

  3. XSS(跨站脚本):检测将用户输入未转义注入 HTML 的模式,如 innerHTML=、dangerouslySetInnerHTML、v-html=、Blade 未转义输出、Django/Jinja safe 过滤器。严重级别:HIGH。

  4. 命令注入(Command Injection):检测将外部输入直接传给 shell 命令的模式,如 os.system(f"、subprocess 的 shell=True、exec(、eval(、Node.js 的 child_process.exec(`。严重级别:CRITICAL。

  5. 错误信息暴露(Error Information Exposure):检测在用户响应中包含内部系统信息的模式,如 traceback.format_exc()、str(e) 直接放入响应对象、响应中包含 stack trace、用户响应函数中的 exc_info=True。严重级别:MEDIUM。

  6. .gitignore 检查:验证密钥文件是否被纳入 .gitignore。必需模式包括 .env 相关(.env、.env.、.env.local)、凭据文件(credentials、credentials.)、密钥文件(.pem、.key、.p12、.pfx)、密钥目录(secrets/、.secrets/)。缺失时严重级别:HIGH。

使用方式

输入——动态目标解析:按以下顺序解析目标目录:

  1. 读取 CLAUDE.md 的 "Project Structure" 部分,提取源代码目录。
  2. 如果 CLAUDE.md 缺失或没有结构信息:用 Glob 匹配源文件(**/*.{ts,tsx,js,jsx,py,java,go,rs}),使用包含匹配文件的顶层目录。
  3. 如果未找到源文件:报告状态为 SHALLOW 并说明原因。

默认排除:node_modules/、.git/、dist/、build/、coverage/。技能特定排除:.test.、.spec.、test_、_test.*(安全测试代码被排除)。

强制输出:目标解析结果。在继续验证前必须输出 CLAUDE.md 检查结果、已解析目录、源文件数量、解析方法(CLAUDE.md / Glob fallback / SHALLOW)。

执行逻辑:

  1. 用 Glob 收集目标源文件(排除测试文件)。
  2. 类别 1-5:对所有源文件逐类 Grep 对应模式。
  3. 类别 6:读取 .gitignore 文件并检查必需模式。
  4. 按严重级别排序检测项并以表格输出。

强制输出:安全扫描验证矩阵。在生成最终报告前输出矩阵,包含类别、状态、检查项数、发现数、严重级别、证据。状态值包括 PASS(验证完成,无问题)、NOT_APPLICABLE(无源文件)、SKIPPED(插件问题)、SHALLOW(目标解析失败)。

输出前检查清单:每个验证类别都有状态值;状态非 SKIPPED 的类别都有证据值;每个发现都包含文件路径、行号(适用时)和匹配模式;.gitignore 检查已验证所有必需模式;报告语言与用户对话语言一致。

Schema 合规检查:写入 .ww-w-ai/devtools/scan-security/ 前,验证 JSON 输出中 schema.json 的每个 required 字段存在且非空;findings[] 数组包含每个检测项;severitySummary 计数与实际各严重级别发现数一致。

输出:以用户对话语言生成扫描报告,格式为 Markdown 表格,包含 File:Line、Type、Severity、Pattern 列,并统计疑似项总数及 CRITICAL、HIGH、MEDIUM 数量。无疑似项时输出 "No suspected items."。

输出持久化:生成报告后保存到 .ww-w-ai/devtools/scan-security/:如目录缺失则创建;写入 latest.json(遵循 templates/schema.json 的结构化结果);写入 latest.md(遵循 templates/report.template.md 的可读报告);归档到 history/(将 latest.json 复制为 history/{timestamp}.json)。latest.md 使用用户对话语言生成,JSON 字段名保持英文。

适用场景

适用于在代码库中快速发现常见安全漏洞的疑似项,尤其是需要按 OWASP Top 10 进行初步排查的场景。可用于开发过程中的安全自查,或作为安全审计的辅助手段。

限制

  • 基于静态模式匹配,可能存在误报。结果以"疑似项"呈现,开发者必须自行确认是否存在真实漏洞。
  • 环境变量赋值(如 os.environ["API_KEY"])不属于硬编码,会被排除在检测之外。
  • 安全测试代码(带有 SECURITY 前缀注释的代码)按 security.md 例外规则视为有意设置的漏洞。
  • 权限说明:Write 仅用于 .ww-w-ai/ 输出持久化,不修改项目源代码;Bash 仅用于只读的 git/系统查询,不修改文件。Bash 允许用于创建目录(mkdir -p .ww-w-ai/devtools/scan-security/history)。扫描本身是只读的,不修改项目文件。

规范参考

详细验证标准、证据表和示例参见对应规则规范:../../docs/specs/security.md。