Skip to main content
配置与安全

安全扫描

了解 Qoder CLI 的分层安全扫描,以及如何在交互式开发和 CI/CD 中运行安全检查。

Qoder CLI 内置安全扫描能力,可以在代码生成和代码变更过程中辅助发现高风险安全问题。它适合在日常开发中作为一层持续检查机制,帮助你尽早发现危险函数调用、注入风险、敏感信息泄露和跨文件数据流问题。 安全扫描不是替代安全团队审计的完整方案。交互式扫描主要面向当前任务生成的代码和增量代码变更;仓库级扫描可以检查整个仓库或指定路径,适合在 CI/CD 中作为确定性安全门禁。

功能入口

在交互式 TUI 中输入:
/security-settings
该命令会打开安全扫描设置面板。你可以在面板中查看并切换不同级别的扫描能力。 安全扫描能力默认开启。设置会写入用户级配置,用于控制各层扫描能力的开关。L1 Static Check 免费;L2 Lightweight Scan 和 L3 Deep Scan 可能消耗 Credits,具体以产品内提示和当前账号计费规则为准。

扫描级别

Qoder CLI 将安全扫描拆成三个级别。你可以按需要分别开启或关闭。

L1 Static Check

L1 用于当前任务中生成的代码。它通过高风险模式匹配快速检查常见问题,例如危险函数调用、明显的敏感信息泄露模式和其他容易在生成代码中出现的风险。 L1 Static Check 是免费的基础检查,建议默认保持开启,用于在当前任务中快速发现高风险代码模式。

L2 Lightweight Scan

L2 面向增量代码变更。它会进一步理解代码语义,识别更复杂的风险,例如 SQL 注入、远程命令执行、敏感数据泄露等。 如果你希望在日常编码时获得更深入的安全反馈,建议开启 L2。

L3 Deep Scan

L3 面向增量代码变更的深度分析。它会跨文件、跨函数追踪完整数据流,尝试发现单文件视角下不容易暴露的隐藏漏洞。 L3 更适合在提交完成后、评审、推送、创建 PR、发布或部署等交付动作前使用。如果当前只有工作区变更,L3 可能会回退到 L2。

配置扫描级别

打开 /security-settings 后,可以使用方向键在扫描级别之间移动,按 Enter 或 Space 切换开关。按 q 或 Esc 可退出面板。 面板中的每一项会显示当前状态:
  • on 表示该级别已启用。
  • off 表示该级别已关闭。
  • default 表示当前使用默认值。
  • saved 表示该项已经写入用户级配置。
设置面板只写入用户级配置,不会修改项目级配置。

使用配置文件

你也可以在用户级 settings.json 中配置安全扫描。配置项位于 securityScan 下:
{
  "securityScan": {
    "l1StaticCheck": true,
    "l2LightweightScan": true,
    "l3DeepScan": true
  }
}
这三个配置项默认都是 true。如果你想关闭某个级别,可以将对应字段设为 false
{
  "securityScan": {
    "l1StaticCheck": true,
    "l2LightweightScan": false,
    "l3DeepScan": false
  }
}

自动扫描如何工作

启用安全扫描后,Qoder CLI 会根据你的配置加载内置安全能力,并决定启用哪些检查。 当 L1 开启时,Qoder CLI 会在相关工具调用后触发静态检查能力。关闭 L1 后,这部分自动检查不会加载。 只要 L1、L2、L3 中至少有一个开启,Qoder CLI 就会保留统一的安全扫描能力。如果 L1、L2、L3 全部关闭,安全扫描相关能力不会加载。

手动安全扫描

除了自动扫描设置,Qoder CLI 还提供一个手动安全扫描 Skill:
/security-scan
该命令会根据你的意图进入以下三种工作流之一:
  • 项目/文件扫描:扫描整个仓库,或扫描你明确指定的文件和目录。
  • L2 轻量审查:审查当前工作区变更。
  • L3 深度审查:在推送、创建 PR、发布、部署或其他交付动作前,审查尚未审查过的已提交变更。
直接输入 /security-scan 会打开选择器,选项包括 L3 深度扫描、L2 轻量扫描和项目/文件扫描。如果选择项目/文件扫描但没有指定范围,Qoder CLI 会继续询问扫描整个仓库还是指定文件和目录。 你也可以直接在命令中写明模式或范围:
/security-scan L2 轻量审查
/security-scan L3 深度审查
/security-scan 扫描整个仓库
/security-scan 扫描 src/auth 和 src/export
只要任一安全扫描级别开启,项目/文件扫描就可用。L2 和 L3 分别受自己的设置开关控制。显式请求已关闭的 L2 或 L3 时,Qoder CLI 会提示你通过 /security-settings 开启;隐式交付场景中的 L3 检查在 L3 关闭时会保持静默。

在 CI/CD 中运行仓库级扫描

security scan 提供 L4 仓库级扫描。它是非交互式确定性命令,不启动对话会话,也不依赖 Skill,适合直接写入 CI/CD 脚本。 扫描整个仓库:
qoder --cwd /path/to/repository security scan --all
扫描指定文件或目录:
qoder --cwd /path/to/repository security scan src/auth src/payment
--cwd 指定仓库工作目录。CI Job 的当前目录不一定是代码检出目录,因此建议始终显式传入。--all 与路径参数不能同时使用;未提供两者中的任意一种时,命令只显示帮助,不会开始扫描。 通过该 CI/CD 命令执行的全库或指定路径扫描不受 1 万行限制,无需额外配置。仓库越大,扫描通常需要越长时间。 常用选项:
选项说明
--report <format[=path]>生成报告;可以重复指定多个报告
--fail-on <severity>检测到该严重级别及以上问题时返回非零;默认为 high
--wait-timeout <seconds>等待扫描结果的最长时间;默认为 3600
--config <path>使用高级扫描配置文件
例如,生成 SARIF 报告并在发现 High 或 Critical 问题时阻断流水线:
qoder --cwd "$CI_PROJECT_DIR" security scan --all \
  --fail-on high \
  --report sarif=qoder-security.sarif
--fail-on none 可以关闭基于扫描结果的门禁,适合首次接入时观察基线。它不会忽略认证、网络、扫描执行、报告写入或超时错误,这些错误仍会让命令返回非零。 运行环境需要具备可用的 Qoder CLI 认证并能够访问安全扫描服务。首次运行可能包含额外准备时间。扫描需要提交到服务端分阶段分析,即使目标较小也可能持续数分钟。前期分析通常耗时最长,中间结果还需要进一步确认,因此命令可能在一段时间内没有新日志,接近完成时才输出结果和报告。这种静默不表示进程已经卡死。CI Job 的总超时应大于 --wait-timeout,并为报告上传预留时间。 查看全部参数:
qoder security scan --help

适合使用的场景

安全扫描适合放在以下场景中使用:
  • 让 Qoder CLI 生成或修改了安全敏感代码后,例如鉴权、支付、数据导出、文件上传、命令执行等。
  • 在提交代码或交付代码前,希望快速检查当前变更是否引入高风险问题。
  • 在评审前,希望先得到一份面向真实漏洞的安全风险提示。
  • 在使用自动化模式时,希望保留一层持续安全检查。
  • 在 CI/CD 中扫描整个仓库或关键目录,并根据严重级别决定是否阻断流水线。

注意事项

安全扫描主要关注当前任务和增量变更。项目/文件扫描可以扫描整个仓库或指定路径,但它仍不是完整安全审计,也不保证发现所有漏洞。 扫描结果依赖当前代码上下文、可访问文件和启用的扫描级别。对于关键业务代码,建议结合人工安全评审、测试、依赖扫描和组织内安全流程一起使用。 如果安全扫描没有按预期工作,可以先检查以下内容:
  • /security-settings 中对应扫描级别是否为 on
  • 用户级 settings.json 中是否显式关闭了 securityScan 的某些字段。
  • 如果通过配置文件修改,确认 JSON 格式正确并已保存到用户级配置。
  • 当前任务是否产生了可供扫描的新增或修改代码。

相关文档

  • 权限:了解工具调用审批、权限模式和允许/拒绝规则。
  • Hooks:了解 Qoder CLI 如何在工具调用和会话生命周期中执行自动化逻辑。
  • Skills:了解如何通过 Skill 扩展 Qoder CLI 的专业能力。