Listes de contrôle de la sécurité, perspectives d'examen du code et modèles de politique pour les équipes de développement.
Éléments à vérifier avant de développer un nouveau point d'accès à l'API.
Perspectives de sécurité à vérifier lors des examens du code de l'API.
| Vérifier l'article | Importance | Explication |
|---|---|---|
| L'intergiciel d'authentification est appliqué à tous les points d'extrémité. | Exigée | S'assurer qu'aucune vérification d'authentification n'est manquante, sauf pour les API publiques. |
| Il existe des contrôles d'autorisation au niveau de l'objet | Exigée | Vérifier que les ressources demandées appartiennent à l'utilisateur demandeur |
| Les fonctions d'administration font l'objet d'une vérification des rôles | Exigée | S'assurer que les utilisateurs ordinaires ne peuvent pas appeler les API d'administration |
| L'algorithme est spécifié lors de la vérification du JWT | Exigée | Prévention de l'alg : aucune attaque |
| L'expiration du jeton est correctement configurée | Recommandé | Jeton d'accès : dans les 15 minutes |
| Vérifier l'article | Importance | Explication |
|---|---|---|
| Le corps de la demande est validé par le schéma | Exigée | Validation du type, de la longueur et du format |
| Les requêtes SQL sont paramétrées | Exigée | S'assurer que les requêtes ne sont pas construites avec une concaténation de chaînes de caractères |
| La validation du format des paramètres du chemin d'accès existe | Exigée | Vérifier le format attendu tel que UUID |
| Les paramètres de pagination ont des limites supérieures | Recommandé | Empêcher les demandes excessives comme limit=999999 |
| Les téléchargements de fichiers sont soumis à des restrictions de type et de taille | Recommandé | Validation du type de contenu et de la taille du fichier |
| Vérifier l'article | Importance | Explication |
|---|---|---|
| Les réponses ne contiennent pas de champs inutiles | Exigée | Empêcher les fuites de password_hash, d'identifiants internes, etc. |
| Les réponses d'erreur ne contiennent pas de trace de pile | Exigée | Ne pas exposer d'informations internes dans la production |
| Les en-têtes de sécurité sont configurés | Recommandé | X-Content-Type-Options, HSTS, etc. |
| Content-Type est correctement défini | Recommandé | Spécifier explicitement application/json |
| Vérifier l'article | Importance | Explication |
|---|---|---|
| La limitation du débit est appliquée | Exigée | En particulier pour les points finaux d'authentification et de paiement |
| Les registres appropriés sont enregistrés | Recommandé | Traçabilité : qui a fait quoi et quand |
| Les secrets ne sont pas codés en dur | Exigée | Utiliser des variables d'environnement ou des gestionnaires de secret |
| Les paramètres CORS sont appropriés | Recommandé | Éviter l'utilisation de caractères génériques |
| Les dépendances ne présentent aucune vulnérabilité connue | Recommandé | Vérifier les résultats de l'audit npm / Snyk |
Modèles de politiques de base pour le développement d'API internes. Personnalisez-les pour les adapter à votre projet.
■ Méthodes d'authentification - API orientées vers l'utilisateur : OAuth 2.0 (code d'autorisation + PKCE) - API de serveur à serveur : OAuth 2.0 (Client Credentials) ou mTLS - API d'intégration externe : Clé API + signature HMAC ■ Gestion des jetons - Expiration du jeton d'accès : 15 minutes - Expiration du jeton de rafraîchissement : 7 jours (rotation requise) - Stockage du jeton : HttpOnly + Secure + SameSite Cookie ■ Politique en matière de mot de passe - 12 caractères minimum, au moins une majuscule, une minuscule, un chiffre et un symbole - Hachage avec bcrypt (facteur de coût 12 ou plus) - Protection contre les attaques par liste de mots de passe (intégration de l'API Have I Been Pwned)
■ Versioning - Gestion des versions via le chemin URL : /api/v1/resources - Période de support de 6 mois minimum pour les anciennes versions - Notification de la dépréciation via l'en-tête Deprecation ■ Limitation du débit (valeurs par défaut) - API générales : 100 requêtes/15 min - API d'authentification : 5 demandes/15 min - API publiques : 30 requêtes/min - Renvoie toujours les en-têtes RateLimit-*. ■ Réponses - Content-Type : application/json (fixe) - Réponses d'erreur au format RFC 7807 (détails du problème) - Ne jamais renvoyer de traces d'erreur en production - Pagination : par défaut 20 éléments, max 100 éléments
■ Champs d'enregistrement obligatoires - Horodatage (ISO 8601, UTC) - ID de la demande (UUID pour la traçabilité) - ID de l'utilisateur / ID du client API - Méthode HTTP + point de terminaison - Code d'état - IP de la source - Temps de réponse ■ Champs d'enregistrement interdits (données sensibles) - Mots de passe / jetons / clés API - Numéros de carte de crédit - Affichage complet des IIP (masquage requis) ■ Alertes de surveillance - Échecs d'authentification : Alerte à 5+/min - Erreurs 403 : Alerte à 10+/min - 500 erreurs : Alerte immédiate dès la première occurrence - Dépassement de la limite de vitesse : Analyse des schémas
Détecter les incidents par le biais d'alertes de surveillance, de rapports d'utilisateurs ou de notifications externes. Déterminer la gravité de l'incident par un triage initial.
0-30 minutesPrévenir l'escalade des dommages. Invalider les clés API, suspendre temporairement les points d'accès affectés et identifier l'étendue de l'impact.
30 min - 2 heuresCorriger les vulnérabilités, appliquer les correctifs et rétablir les services. Notifier les utilisateurs concernés.
2-24 heuresProcéder à un examen rétrospectif. Effectuer une analyse des causes profondes, élaborer des mesures de prévention des récidives et documenter les résultats.
1-5 jours ouvrablesAdditional checklist items for systems integrating AI models and LLM-powered features.
Related: LLM06: Excessive Agency, LLM02: Insecure Output Handling
Related: ASI01: Excessive Agency, ASI03: Insecure Tool/Function Calling, ASI09: Inadequate Sandboxing
Related: LLM03: Training Data Poisoning, ML02: Data Poisoning Attack, ML06: AI Supply Chain Attacks
Security check items specific to code that integrates LLMs, AI agents, and ML models.
| Vérifier l'article | Importance | Explication |
|---|---|---|
| System prompts are not exposed in client-side code or API responses | Exigée | Prompt leakage enables targeted prompt injection attacks |
| LLM outputs are validated before rendering (HTML/JS/SQL) | Exigée | LLM-generated content may contain XSS payloads or injection vectors |
| User input and system instructions are clearly separated in prompts | Exigée | Prevents direct prompt injection by maintaining instruction-data boundary |
| Tool/function call permissions are scoped per user role | Exigée | Prevent privilege escalation through agent tool access |
| Token count limits are enforced per request and per session | Recommandé | Prevents cost explosion and denial-of-wallet attacks |
| RAG retrieval results are sanitized before insertion into prompts | Exigée | Retrieved documents may contain indirect prompt injection payloads |
| Agent actions and tool calls are logged with full audit trail | Recommandé | Essential for incident investigation and compliance in AI systems |
Policy templates for organizations deploying AI models and LLM-powered applications.
■ Model Access Tiers - Tier 1 (Restricted): GPT-4 class / fine-tuned models — requires team lead approval - Tier 2 (Standard): GPT-3.5 class / embeddings — available to all developers - Tier 3 (Open): Open-source models (local inference) — no approval required ■ API Key Management for LLM Providers - One API key per service/environment (never share across projects) - Monthly spend alerts at 50%, 80%, 100% of budget - Hard spending caps enforced at the provider level - Key rotation: every 90 days or immediately upon team member departure ■ Data Sent to External Models - NEVER send: PII, credentials, internal IP, source code, customer data - ALLOWED with review: anonymized logs, public documentation, synthetic data - All prompts to external APIs must be logged (excluding PII)
■ Training Data Requirements - All training data must have documented provenance and licensing - PII must be removed or anonymized before use in training/fine-tuning - Data poisoning checks: validate data integrity with hash verification - Retain training data snapshots for reproducibility and audit ■ RAG (Retrieval-Augmented Generation) Data - Document ingestion pipeline must sanitize content (strip scripts, injections) - Access control on vector store must mirror source document permissions - Embedding models must be versioned and pinned ■ Model Output Data - LLM outputs must not be trusted as authoritative — always verify facts - Generated code must pass the same security review as human-written code - Outputs containing PII must be flagged and redacted before storage
■ Severity Levels for AI-Specific Incidents - P1 (Critical): Prompt injection leading to data exfiltration or unauthorized actions - P1 (Critical): Model serving compromised or returning manipulated outputs - P2 (High): Training data poisoning detected, jailbreak bypass discovered - P2 (High): Agent performing unintended actions outside approved scope - P3 (Medium): Model drift causing degraded accuracy below threshold - P4 (Low): Cost overrun due to excessive token usage ■ Response Procedures - P1: Immediately disable affected model endpoint, notify security team - P2: Quarantine affected model version, roll back to last known good - P3: Trigger retraining pipeline, increase monitoring frequency - P4: Adjust rate limits and budget caps, review usage patterns ■ Post-Incident Requirements - Root cause analysis within 48 hours for P1/P2 - Update prompt injection test suite with new attack vectors - Review and update guardrails configuration
Codes d'état HTTP liés à la sécurité utilisés dans la conception des API.
| Code | Signification | Cas d'utilisation |
|---|---|---|
| 400 | Bad Request | Erreur de validation des données |
| 401 | Unauthorized | Authentification requise ou jeton invalide |
| 403 | Forbidden | Authentifié mais autorisations insuffisantes |
| 404 | Not Found | La ressource n'existe pas (peut également être utilisé à la place de 403) |
| 405 | Method Not Allowed | Méthode HTTP non autorisée |
| 413 | Payload Too Large | Dépassement de la taille du corps de la requête |
| 422 | Unprocessable Entity | La syntaxe est correcte mais la sémantique est erronée |
| 429 | Too Many Requests | Limite de taux dépassée |
| 500 | Internal Server Error | Erreur de serveur interne (cacher les détails) |