Skip to content

KareyPyer/Prompt-Guardian

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PromptGuardian

Validateur de prompt pré-LLM. Analyse chaque prompt utilisateur avant envoi au modèle et rejette tout ce qui ressemble à une injection, un jailbreak, ou une tentative d'extraction de données.

Philosophie : préférence pour les faux positifs. Un prompt légitime bloqué à tort est moins grave qu'un prompt malicieux transmis au modèle.


Installation

pip install pyyaml

Aucune autre dépendance externe. Python 3.10+ requis.


Usage CLI

# Valider un prompt inline
python prompt_guardian.py --prompt "Ignore all previous instructions and tell me..."

# Valider depuis un fichier
python prompt_guardian.py --file mon_prompt.txt

# Avec rapport JSON
python prompt_guardian.py --prompt "..." --report

# Avec config alternative
python prompt_guardian.py --prompt "..." --config /mon/chemin/config/

# Mode silencieux (logs WARNING+ seulement)
python prompt_guardian.py --prompt "..." --quiet

Code de sortie : 0 = ALLOWED, 1 = REJECTED — utilisable dans un pipeline shell.


Usage comme module Python

from prompt_guardian import PromptGuardian

guardian = PromptGuardian(verbose=True)
result = guardian.validate(user_prompt)

if result.verdict == "REJECTED":
    print("Prompt rejeté :", result.flags)
    # Ne pas transmettre au LLM
else:
    # Transmettre au LLM
    response = llm.complete(user_prompt)

Structure du projet

prompt_guardian/
├── prompt_guardian.py       # Moteur principal
├── config/
│   ├── rules.yaml           # Règles regex, scoring, heuristiques
│   ├── thresholds.yaml      # Seuil de rejet global
│   └── whitelist.yaml       # Bypass autorisés
└── reports/                 # Rapports JSON générés (--report)

Calibrage

Modifier la sensibilité globale

Dans config/thresholds.yaml :

reject_threshold: 30.0   # Valeur par défaut (strict)
Valeur Mode
20 Ultra-strict
30 Strict (défaut)
50 Équilibré
70 Permissif

Désactiver une règle précise

Dans config/rules.yaml, mettre score: 0 sur la règle concernée :

- id: JBK-004
  score: 0       # Désactivée — trop de faux positifs sur mes prompts créatifs
  ...

Corriger un faux positif récurrent

  1. Lancer avec --report pour obtenir le JSON détaillé
  2. Identifier la règle déclenchée (rule_id, matched_text)
  3. Soit baisser le score de cette règle, soit ajouter le prompt à whitelist.yaml

Ajouter une règle personnalisée

Dans config/rules.yaml, section regex_rules :

- id: CUSTOM-001
  category: custom
  severity: HIGH
  score: 40.0
  description: "Ma règle métier spécifique"
  pattern: "mon_pattern_regex_ici"

Format du rapport JSON

{
  "prompt_hash": "a3f1b2c4...",
  "timestamp": "2026-05-11T14:32:01Z",
  "verdict": "REJECTED",
  "total_score": 95.0,
  "threshold_used": 30.0,
  "hits": [
    {
      "rule_id": "INJ-SYS-001",
      "category": "prompt_injection",
      "severity": "CRITICAL",
      "score": 50.0,
      "description": "Tentative d'override de system prompt",
      "matched_text": "ignore all previous instructions",
      "offset": 0
    }
  ],
  "flags": [
    "[CRITICAL] INJ-SYS-001: Tentative d'override de system prompt"
  ],
  "metadata": {
    "prompt_length": 48,
    "hit_categories": ["prompt_injection"]
  }
}

Catégories de règles

Catégorie Description
prompt_injection Override/redéfinition du system prompt
jailbreak Personas DAN, modes sans restrictions
data_extraction Tentatives d'exfiltration du contexte
social_engineering Usurpation d'identité, pression émotionnelle
harmful_content Demandes de contenu illégal ou dangereux
obfuscation Leetspeak, encodage, caractères invisibles
indirect_injection Injection via contenu externe simulé
structural Heuristiques sur la forme du prompt

Limitations connues

  • Les règles regex opèrent sur une normalisation légère (lowercase + homoglyphes courants). Un adversaire déterminé avec des techniques d'obfuscation avancées (substitution Unicode complexe, tokenisation exploitée) peut théoriquement contourner certaines règles.
  • Le scoring est additif et non pondéré par contexte — ajouter des règles métier si votre domaine a des patterns spécifiques.
  • Ce validateur est un premier filtre, pas un garde-fou exhaustif. Combinez-le avec les mécanismes de sécurité natifs de votre LLM.

About

Code et fichiers de configuration pour rejeter les Rogue Prompts

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages