CLI d'analyse statique qui scanne le code généré par IA à la recherche de vulnérabilités telles que l'injection SQL, la réflexion non sécurisée et les secrets codés en dur, avec export SARIF et contrôle CI/CD.
Un outil d'analyse statique rapide et autonome, conçu spécifiquement pour détecter les vulnérabilités introduites par les assistants de codage IA. CanoP analyse votre base de code localement pour identifier les risques de sécurité dans le code généré par l'IA.
fixes.json structurées. Celles-ci contiennent des invites spécifiques conçues pour être renvoyées aux grands modèles de langage (LLM) pour une remédiation immédiate et contextuelle.
CanoP analyse votre code localement et produit des constats de sécurité exploitables avec des conseils de remédiation prêts pour l'IA.
CanoP charge ses règles intégrées depuis canop/rules/*.yml et exécute son scanner de motifs intégré localement. Si la CLI Semgrep est installée, CanoP peut également utiliser les mêmes règles pour une analyse basée sur l'AST. Semgrep est optionnel ; l'installation standard du paquet ne télécharge ni ne nécessite la CLI Semgrep.
CanoP est distribué comme un paquet Python standard via PyPI.
Sur Windows, ou si vous êtes déjà dans un environnement virtuel actif, vous pouvez utiliser l'installateur pip standard :
pip install canop
Les distributions modernes macOS et Linux empêchent souvent les installations globales via pip pour protéger les paquets système (PEP 668). La norme communautaire pour installer des outils CLI Python dans des environnements isolés est pipx :
pipx install canop
(Remarque : pipx install canop fonctionne parfaitement sous Windows également !)
Vérifiez l'installation pour vous assurer que la CLI est disponible dans le chemin de votre système :
canop --version
Initialisez les fichiers de configuration dans votre dépôt. Cette commande crée un fichier de politique .canop.yml et un fichier .canopignore pour exclure les répertoires bruyants comme node_modules ou venv de l'analyse :
canop init
Lancez une analyse de sécurité complète sur votre répertoire courant. Le scanner évalue votre code par rapport au moteur de règles interne et affiche un tableau détaillé avec un score de sécurité final :
canop scan .
Analysez uniquement les fichiers qui ont été modifiés dans git. Cela réduit considérablement le temps d'analyse et est idéal pour les hooks pre-commit, garantissant que le nouveau code est sécurisé avant d'être validé :
canop scan . --changed
Par défaut, CanoP garde votre terminal propre en limitant les constats affichés à 50. Si vous avez besoin d'aller plus loin ou d'ajuster cela :
# 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 est conçu pour agir comme un gardien de sécurité dans les pipelines de déploiement automatisés (tels que GitHub Actions ou GitLab CI). Vous pouvez configurer le scanner pour qu'il retourne un code de sortie non nul — ce qui fait automatiquement échouer le build — si des critères de sécurité spécifiques ne sont pas respectés.
# 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
Pour les équipes qui nécessitent un suivi historique, un audit ou une intégration avec des systèmes externes, CanoP prend en charge plusieurs formats de sortie.
# 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 extrait les métadonnées de remédiation de son moteur de règles pour générer des invites qui indiquent aux assistants de codage IA comment corriger exactement les vulnérabilités détectées.
# Generate a fixes.json file containing actionable prompts for your LLM
canop scan . --prescriptions fixes.json
Le comportement de CanoP peut être codifié à l'aide d'un fichier .canop.yml placé à la racine de votre projet. Ce fichier agit comme une politique de sécurité centralisée, garantissant que tous les développeurs et pipelines CI/CD adhèrent aux mêmes seuils.
# .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
Vous pouvez également vous appuyer sur .canopignore pour définir des fichiers ou répertoires spécifiques que le scanner doit ignorer. Il utilise des motifs glob standard, fonctionnant de manière identique à .gitignore.
Si vous souhaitez contribuer à la CLI ou tester des modifications localement, clonez le dépôt et installez-le en mode éditable. Le mode éditable associe la commande terminal canop directement à votre code source en direct.
git clone https://github.com/openbreach/CanoP.git canop
cd canop
pip install -e .
Exécutez la suite de tests localement avant de soumettre des modifications :
python -m unittest discover -s tests -v
Pour construire les artefacts de distribution, installez les outils de publication et exécutez :
pip install -r requirements-dev.txt
python -m build
Les règles de sécurité sont définies au format YAML Semgrep standard et se trouvent dans canop/rules/*.yml. Veuillez consulter CONTRIBUTING.md pour des directives complètes sur la façon de structurer, tester et soumettre de nouvelles règles afin d'étendre les capacités de détection du scanner.
Si vous trouvez des bugs, avez des demandes de fonctionnalités ou avez besoin d'aide générale, veuillez ouvrir un ticket sur GitHub ou nous contacter directement à [email protected].
Ce projet est sous licence MIT — voir le fichier LICENSE pour plus de détails.