code-security

Par semgrep · skills

Directives de sécurité pour écrire du code sécurisé. À utiliser lors de l'écriture de code, de la revue de code pour détecter des vulnérabilités, ou lorsqu'on pose des questions sur les bonnes pratiques de codage sécurisé comme « vérifier les injections SQL » ou « revoir la sécurité ». IMPORTANT : Toujours consulter cette skill lors de l'écriture ou de la revue de tout code qui gère les entrées utilisateur, l'authentification, les opérations sur les fichiers, les requêtes en base de données, les requêtes réseau, la cryptographie, ou la configuration d'infrastructure (Terraform, Kubernetes, Docker, GitHub Actions) — même si l'utilisateur ne mentionne pas explicitement la sécurité. À utiliser également lorsque les utilisateurs demandent de « revoir mon code », « vérifier s'il y a des bugs », ou « est-ce que c'est sûr ».

npx skills add https://github.com/semgrep/skills --skill code-security

Directives de Sécurité du Code

Règles de sécurité complètes pour écrire du code sécurisé dans 15+ langages. Couvre le Top 10 OWASP, la sécurité de l'infrastructure et les bonnes pratiques de codage avec 28 catégories de règles.

Comment Utiliser Cette Skill

Mode proactif — Lors de l'écriture ou de la révision de code, vérifiez automatiquement les vulnérabilités pertinentes en fonction du langage et des modèles présents. Vous n'avez pas besoin d'attendre que l'utilisateur pose une question sur la sécurité.

Mode réactif — Quand l'utilisateur pose une question sur la sécurité, utilisez les catégories ci-dessous pour trouver le fichier de règles pertinent, puis lisez-le pour des exemples détaillés de code vulnérable/sécurisé.

Flux de travail

  1. Identifiez le langage et ce que fait le code (traite des entrées ? interroge une BD ? lit des fichiers ?)
  2. Vérifiez les règles pertinentes ci-dessous — concentrez-vous d'abord sur les impacts Critique et Élevé
  3. Lisez le fichier de règles spécifique depuis rules/ pour des exemples de code détaillés dans ce langage
  4. Appliquez les modèles sécurisés, ou signalez les modèles vulnérables lors d'une révision

Règles de Priorité Spécifiques au Langage

Lors de l'écriture de code dans ces langages, vérifiez d'abord ces règles :

Langage Règles Prioritaires à Vérifier
Python Injection SQL, injection de commandes, traversée de répertoires, injection de code, SSRF, crypto non sécurisée
JavaScript/TypeScript XSS, prototype pollution, injection de code, transport non sécurisé, CSRF
Java Injection SQL, XXE, désérialisation non sécurisée, crypto non sécurisée, SSRF
Go Injection SQL, injection de commandes, traversée de répertoires, transport non sécurisé
C/C++ Sécurité mémoire, fonctions non sûres, injection de commandes, traversée de répertoires
Ruby Injection SQL, injection de commandes, injection de code, désérialisation non sécurisée
PHP Injection SQL, XSS, injection de commandes, injection de code, traversée de répertoires
HCL/YAML Terraform (AWS/Azure/GCP), Kubernetes, Docker, GitHub Actions

Catégories

Impact Critique

  • Injection SQL (rules/sql-injection.md) - Utilisez des requêtes paramétrées, ne concaténez jamais l'entrée utilisateur
  • Injection de Commandes (rules/command-injection.md) - Évitez les commandes shell avec entrée utilisateur, utilisez des API sûres
  • XSS (rules/xss.md) - Échappez la sortie, utilisez les protections du framework
  • XXE (rules/xxe.md) - Désactivez les entités externes dans les parseurs XML
  • Traversée de Répertoires (rules/path-traversal.md) - Validez et nettoyez les chemins de fichiers
  • Désérialisation non Sécurisée (rules/insecure-deserialization.md) - Ne désérialisez jamais de données non fiables
  • Injection de Code (rules/code-injection.md) - Ne faites jamais eval() sur l'entrée utilisateur
  • Secrets Codés en Dur (rules/secrets.md) - Utilisez les variables d'environnement ou les gestionnaires de secrets
  • Sécurité Mémoire (rules/memory-safety.md) - Prévenez les débordements de buffer, use-after-free (C/C++)

Impact Élevé

  • Crypto non Sécurisée (rules/insecure-crypto.md) - Utilisez SHA-256+, AES-256, évitez MD5/SHA1/DES
  • Transport non Sécurisé (rules/insecure-transport.md) - Utilisez HTTPS, vérifiez les certificats
  • SSRF (rules/ssrf.md) - Validez les URLs, utilisez des listes blanches
  • Problèmes JWT (rules/authentication-jwt.md) - Vérifiez toujours les signatures
  • CSRF (rules/csrf.md) - Utilisez des tokens CSRF sur les requêtes qui modifient l'état
  • Prototype Pollution (rules/prototype-pollution.md) - Validez les clés d'objet en JavaScript

Infrastructure

  • Terraform AWS/Azure/GCP (rules/terraform-aws.md, rules/terraform-azure.md, rules/terraform-gcp.md) - Chiffrement, principe du moindre privilège, pas d'accès public
  • Kubernetes (rules/kubernetes.md) - Pas de conteneurs privilégiés, exécution en tant que non-root
  • Docker (rules/docker.md) - N'exécutez pas en tant que root, épinglez les versions d'image
  • GitHub Actions (rules/github-actions.md) - Évitez l'injection de scripts, épinglez les versions d'actions

Impact Moyen/Faible

  • Regex DoS (rules/regex-dos.md) - Évitez les rétrotraces catastrophiques
  • Conditions de Course (rules/race-condition.md) - Utilisez une synchronisation appropriée
  • Correctness (rules/correctness.md) - Évitez les bugs logiques courants
  • Bonnes Pratiques (rules/best-practice.md) - Modèles généraux de codage sécurisé

Consultez rules/_sections.md pour l'index complet avec références CWE/OWASP.

Référence Rapide

Vulnérabilité Prévention Clé
Injection SQL Requêtes paramétrées
XSS Encodage de la sortie
Injection de Commandes Évitez shell, utilisez des APIs
Traversée de Répertoires Validez les chemins
SSRF Listes blanches d'URLs
Secrets Variables d'environnement
Crypto SHA-256, AES-256

Skills similaires