静态分析CLI,用于扫描AI生成的代码中的漏洞,如SQL注入、不安全反射和硬编码密钥,并支持SARIF导出和CI/CD门禁。
一款快速、独立的静态分析工具,专为检测 AI 编码助手引入的漏洞而设计。CanoP 在本地分析你的代码库,以识别 AI 生成代码中的安全风险。
fixes.json 载荷。这些载荷包含特定的提示词,旨在反馈给大型语言模型(LLM),以便立即进行上下文感知的修复。
CanoP 在本地分析你的代码,并生成可操作的安全发现结果以及 AI 就绪的修复指导。
CanoP 从 canop/rules/*.yml 加载其捆绑的规则,并在本地运行其内置的模式扫描器。如果安装了 Semgrep CLI,CanoP 还可以使用相同的规则进行基于 AST 的分析。Semgrep 是可选的;标准软件包安装不会下载或要求 Semgrep CLI。
CanoP 通过 PyPI 以标准 Python 包的形式分发。
在 Windows 上,或者如果你已经处于激活的虚拟环境中,可以使用标准的 pip 安装程序:
pip install canop
现代 macOS 和 Linux 发行版通常会阻止全局 pip 安装以保护系统包(PEP 668)。在隔离环境中安装 Python CLI 工具的社区标准是 pipx:
pipx install canop
(注意:pipx install canop 在 Windows 上也能完美运行!)
验证安装,以确保 CLI 在你的系统路径中可用:
canop --version
在你的仓库中初始化配置文件。此命令会创建一个 .canop.yml 策略文件和一个 .canopignore 文件,用于将 node_modules 或 venv 等嘈杂目录排除在扫描之外:
canop init
对当前目录运行全面的安全扫描。扫描器会根据内部规则引擎评估你的代码,并输出一个包含最终安全评分的详细表格:
canop scan .
仅扫描在 git 中已修改的文件。这能大幅缩短扫描时间,非常适合用于 pre-commit 钩子,确保新代码在提交前是安全的:
canop scan . --changed
默认情况下,CanoP 会将显示的发现结果上限设为 50,以保持终端整洁。如果你需要深入查看或调整此设置:
# No cap, show me every single finding:
canop scan . --all
# Set a custom cap (e.g., if you only want to see the top 10 results):
canop scan . --limit 10
CanoP 旨在自动化部署流水线(如 GitHub Actions 或 GitLab CI)中充当安全守门人。你可以配置扫描器在不满足特定安全标准时返回非零退出码——这会自动使构建失败。
# Fail the deployment pipeline if any CRITICAL or HIGH vulnerabilities are found
canop scan . --fail-on HIGH
# Fail the deployment pipeline if the aggregate security score falls below 85
canop scan . --min-score 85
对于需要历史跟踪、审计或与外部系统集成的团队,CanoP 支持多种输出格式。
# Export the raw native Python dictionary data to a standard JSON file for custom parsing
canop scan . --json-out results.json
# Export to SARIF (Static Analysis Results Interchange Format).
# Uploading this file to GitHub allows GitHub to display the vulnerabilities inline in Pull Requests.
canop scan . --sarif results.sarif
CanoP 从其规则引擎中提取修复元数据,以生成提示词,指导 AI 编码助手如何精确修复检测到的漏洞。
# Generate a fixes.json file containing actionable prompts for your LLM
canop scan . --prescriptions fixes.json
CanoP 的行为可以通过放置在项目根目录的 .canop.yml 文件进行编码定义。该文件充当集中式安全策略,确保所有开发人员和 CI/CD 流水线都遵循相同的阈值。
# .canop.yml
# Require a minimum security grade to pass the pipeline
min_grade: B
# Treat these specific severity levels as pipeline failures
fail_on:
- CRITICAL
- HIGH
# Ignore specific paths from being scanned
ignore:
- "tests/**"
- "docs/**"
# Allow a certain number of findings before returning a non-zero exit code (0 = strictly unlimited)
max_findings: 0
你也可以依靠 .canopignore 来定义扫描器应跳过的特定文件或目录。它使用标准的 glob 模式,功能与 .gitignore 完全相同。
如果你希望为 CLI 做出贡献或在本地测试更改,请克隆仓库并以可编辑模式安装。可编辑模式会将 canop 终端命令直接映射到你的实时源代码。
git clone https://github.com/openbreach/CanoP.git canop
cd canop
pip install -e .
在提交更改之前,请在本地运行测试套件:
python -m unittest discover -s tests -v
要构建分发包,请安装发布工具并运行:
pip install -r requirements-dev.txt
python -m build
安全规则以标准的 Semgrep YAML 格式定义,位于 canop/rules/*.yml 中。请参阅 CONTRIBUTING.md,了解有关如何构建、测试和提交新规则以扩展扫描器检测能力的全面指南。
如果你发现任何错误、有功能请求或需要一般性帮助,请在 GitHub 上提交 issue,或直接通过 [email protected] 联系我们。
本项目根据 MIT 许可证授权 - 详情请参阅 LICENSE 文件。