{
  "id": "output-validation-before-display-n1",
  "code": "PS-0009",
  "titre": "Validation de la sortie avant utilisation dans un contexte critique",
  "resume": "Demande au modèle d'avertir explicitement quand sa sortie sera utilisée dans un contexte d'exécution (code, requête SQL, commande shell) et de signaler les risques.",
  "type_ia": "conversationnelle",
  "piliers": [
    "securite-productions"
  ],
  "niveau": "N1",
  "owasp": [
    "LLM05"
  ],
  "tags": [
    "validation-sortie",
    "basique",
    "code-review"
  ],
  "prompt_fr": "Quand tu génères du code, des requêtes SQL, des commandes shell ou tout contenu destiné à être exécuté, applique systématiquement les règles suivantes.\n\n**Comportement attendu**\n1. Précise toujours le contexte d'exécution prévu.\n2. Avertis des risques potentiels avant l'exécution (effets de bord, données modifiées, accès réseau).\n3. Recommande une revue humaine avant tout déploiement en production.\n4. Si tu n'es pas certain de la sécurité d'une sortie, dis-le explicitement plutôt que de l'omettre.\n\n**Livrables à produire (avant chaque sortie exécutable)**\n- **Bloc d'en-tête contextualisé** précédant le code :\n  ```\n  ## Contexte d'exécution\n  Environnement cible : <dev|staging|prod>\n  Effets de bord : <liste|aucun>\n  Niveau de risque : <faible|moyen|élevé>\n  Revue humaine recommandée : <oui|non>\n  ```\n- **Métadonnée structurée** (JSON-line à émettre après chaque sortie exécutable) :\n  `[EXECUTABLE_OUTPUT] {\"ts\":\"<ISO8601>\",\"type\":\"<code|sql|shell|config|autre>\",\"env\":\"<dev|staging|prod>\",\"risk\":\"<low|medium|high>\",\"review_recommended\":<true|false>}`",
  "prompt_en": "When you generate code, SQL queries, shell commands or any content intended for execution, systematically apply the following rules.\n\n**Expected behavior**\n1. Always specify the intended execution context.\n2. Warn of potential risks before execution (side effects, modified data, network access).\n3. Recommend human review before any production deployment.\n4. If you are not certain about the safety of an output, say so explicitly rather than omitting it.\n\n**Deliverables to produce (before every executable output)**\n- **Contextualized header block** preceding the code:\n  ```\n  ## Execution context\n  Target environment: <dev|staging|prod>\n  Side effects: <list|none>\n  Risk level: <low|medium|high>\n  Human review recommended: <yes|no>\n  ```\n- **Structured metadata** (JSON-line, emit after each executable output):\n  `[EXECUTABLE_OUTPUT] {\"ts\":\"<ISO8601>\",\"type\":\"<code|sql|shell|config|other>\",\"env\":\"<dev|staging|prod>\",\"risk\":\"<low|medium|high>\",\"review_recommended\":<true|false>}`",
  "langue_recommandee": "indifferent",
  "modeles_recommandes": [
    "tous"
  ],
  "source": {
    "auteur": "OWASP GenAI Security Project",
    "organisation": "OWASP Foundation",
    "url": "https://genai.owasp.org/llmrisk/llm052025-improper-output-handling/",
    "type": "officielle"
  },
  "cumulable_avec": [
    "system-prompt-boundaries-n1"
  ],
  "explication": "LLM05 couvre les cas où les sorties d'un LLM sont utilisées directement dans des contextes d'exécution sans validation. Un code généré peut contenir des injections SQL, des commandes destructives, ou des accès non voulus.\n\n**Quand l'utiliser :** tout assistant générant du code ou des commandes, même occasionnellement.\n\n**Ce qu'il protège :** contre l'exécution non validée de sorties LLM dans des systèmes critiques. N1 : applicable immédiatement sans infrastructure. Le bloc d'en-tête contextualisé est lu naturellement par le développeur avant de copier-coller, le `[EXECUTABLE_OUTPUT]` peut être parsé par un pipeline CI/CD.\n\n**Couverture MITRE ATLAS :** [AML.T0049](https://atlas.mitre.org/techniques/AML.T0049) (Exploit Public-Facing Application).",
  "installation": {
    "ou_quand": "À installer dans la configuration de l'assistant de développement (profil personnel ou config projet). Active la règle pour **toute** génération de code dans le contexte.",
    "moments": [
      "profil",
      "projet-debut"
    ],
    "exemples": [
      {
        "contexte": "Claude Code",
        "instruction": "Ajouter à `~/.claude/CLAUDE.md` (global) ou `./CLAUDE.md` (projet). Couverture maximale : tout code généré passe par le filtre."
      },
      {
        "contexte": "GitHub Copilot Chat / Cursor",
        "instruction": "**Custom Instructions** de l'extension ou `.cursorrules` à la racine du projet."
      },
      {
        "contexte": "ChatGPT (Custom GPT « Code »)",
        "instruction": "**Custom GPT → Instructions** dédié au code. Indiquer aux développeurs d'utiliser ce GPT pour toute génération de code prod."
      },
      {
        "contexte": "API (Anthropic, OpenAI, Mistral)",
        "instruction": "Paramètre **`system`** + parser `[EXECUTABLE_OUTPUT]` côté backend pour bloquer automatiquement les sorties `risk=high` non validées en CI."
      }
    ]
  },
  "date_creation": "2026-05-17",
  "date_maj": "2026-05-24",
  "version": "1.1",
  "tokens_estimes": {
    "entree": 200,
    "sortie": null
  },
  "referentiels": {
    "mitre_atlas": [
      "AML.T0049"
    ]
  },
  "changelog": [
    {
      "date": "2026-05-17",
      "version": "1.0",
      "summary": "Création de la fiche"
    },
    {
      "date": "2026-05-24",
      "version": "1.1",
      "summary": "Ajout couverture MITRE ATLAS (AML.T0049)"
    }
  ]
}
