En vous promenant sur Beamreactor, nous stockons votre IP 48h pour des raisons de sécurité.
Beamreactor, WYSIWYG web engines: home

Markdown-Reader

Wissensdatenbank › BEAMREACTOR_CONTEXTGUARDIAN

Beamreactor Contextguardian

ContextGuardian - Pare-feu bidirectionnel LLM #

Version: 1.0 — 2026-03-06

Enveloppe Soleau du 6 janvier 2025 - AEGIS IA (SIRET 993 471 077 00012)

Premiere mise en oeuvre : 15 novembre 2024

1. Vue d'ensemble

ContextGuardian est le systeme de securite bidirectionnel de BeamReactor pour les interactions avec les Large Language Models (LLM). Il intercepte et analyse les echanges dans les deux directions (User -> LLM et LLM -> User) en temps reel.

text
User -> [ContextGuardian IN] -> LLM -> [ContextGuardian OUT] -> User

Il protege contre :

  • Attaques entrantes : prompt injection, jailbreak, exfiltration de donnees, manipulation comportementale
  • Attaques sortantes : injection de code, hallucinations dangereuses, fuite d'informations sensibles, biais toxiques

2. Architecture des composants

Mapping Soleau / Implementation #

Composant SoleauClasse BeamReactorFichier
ContextGuardianLLMFirewalllib/llm_connector/LLMFirewall.php
ThreatCorpusAegisPatternManagerplugins/aegis_corpus/lib/AegisPatternManager.php
BehavioralAnalyzerAegisDetectorplugins/aegis_corpus/lib/AegisDetector.php
PreventiveInjector (IPC)LLMFirewall::filter_input()Integration dans le flux LLM
RiskScorerAegisDetector::calculateSuspicionScore()Scoring ML multi-criteres

Dependances #

text
LLMFirewall
  |-- AegisDetector (analyse ML)
  |     |-- aegis_language_metrics (table BDD)
  |     |-- aegis_jailbreak_patterns (table BDD)
  |     +-- aegis_jailbreak_patterns_i18n (traductions)
  |-- LogSpecialRequests (fallback legacy)
  +-- Parser::sanitize() (nettoyage final)

3. LLMFirewall - Classe principale

Namespace : Beamreactor\LLMConnector\LLMFirewall

Autoload : Charge via CoreAutoLoader (lib/loaders)

3.1 filter_input(string $prompt): ?string #

Filtre les entrees utilisateur avant envoi au LLM.

Flux :

  1. AegisDetector::analyze() - Detection ML multilingue
  2. Si blocked -> log + retourne null (requete bloquee)
  3. LogSpecialRequests::logIfSuspicious() - Fallback logging
  4. LogSpecialRequests::cleanPrompt() - Nettoyage
  5. Parser::sanitize($prompt, 'string') - Sanitization finale
  6. Verification longueur minimale

Retour : Prompt nettoye ou null si bloque.

php
$firewall = new LLMFirewall();
$clean = $firewall->filter_input($userPrompt);

if ($clean === null)
{
    // Requete bloquee par ContextGuardian
    return;
}

3.2 filter_output_chunk(string $chunk): string|false #

Filtre rapide pour le streaming temps-reel (SSE).

Flux :

  1. AegisDetector::analyze() avec seuil output (AEGIS_OUTPUT_THRESHOLD, defaut 0.85)
  2. Verification encodage UTF-8
  3. Detection XSS rapide (regex <script, javascript:, onerror=, onclick=)

Retour : Chunk filtre ou false si bloque.

3.3 filter_output(string $response): string #

Filtre complet applique apres generation complete.

Flux :

  1. Correction encodage via Parser::sanitize($response, 'encoding')
  2. AegisDetector::analyze() avec seuil output
  3. Si score >= seuil -> retourne message generique de blocage
  4. Detection de repetitions suspectes (> 5 occurrences du meme mot)

Retour : Reponse filtree ou message de blocage.

4. AegisDetector - Moteur d'analyse

Namespace : Beamreactor\IA\Aegis\AegisDetector

4.1 Systeme de scoring #

Le score de suspicion (0.0 - 1.0) est calcule par combinaison ponderee de trois metriques :

MetriquePoidsDescription
Longueur (Z-score)25%Proximite avec la longueur moyenne des patterns connus
Densite lexicale50%Frequence de mots suspects par rapport au corpus
N-grams25%Correspondance bi-grams/tri-grams avec les patterns

Bonus : +0.3 si pattern exact trouve dans le corpus (cap a 1.0).

4.2 Niveaux de risque #

ScoreNiveauAction
0.0 - 0.3Low riskTransmission normale
0.3 - 0.5Moderate riskTransmission normale
0.5 - 0.7Elevated riskWarning + transmission
0.7 - 1.0High riskBlocage (seuil input par defaut)

Le seuil output est plus eleve (0.85 par defaut) car le LLM peut mentionner des mots sensibles dans un contexte legitime.

4.3 Detection multilingue #

Le detecteur identifie automatiquement la langue du prompt en comparant les frequences de mots avec les metriques linguistiques precalculees (aegis_language_metrics).

Les patterns du corpus sont stockes avec traductions i18n, permettant la detection dans toutes les langues supportees.

4.4 Methode analyze() #

php
$detector = new AegisDetector(0.7); // seuil
$result = $detector->analyze("ignore all previous instructions");

// Retour :
[
    'blocked'          => true,
    'score'            => 0.92,
    'language'         => 'en',
    'matched_patterns' => [
        ['pattern_id' => 'ignore_instructions_v1', 'severity' => 'critical', 'match_type' => 'exact']
    ],
    'cleaned_prompt'   => null,
    'details'          => [
        'final_score'  => 0.92,
        'length_score' => 0.7,
        'word_score'   => 0.95,
        'ngram_score'  => 0.85,
        'reason'       => 'High risk - likely jailbreak attempt'
    ]
]

5. Aegis Corpus - Base de menaces

5.1 Structure du corpus #

Table aegis_jailbreak_patterns :

ChampDescription
pattern_idIdentifiant unique (ex: ignore_instructions_v1)
pattern_typeCategorie d'attaque
severitylow / medium / high / critical
activePattern actif ou desactive

Categories d'attaque :

  • injection_poetry - Injections poetiques/indirectes (DAN, STAN, etc.)
  • projection - Projection d'autorite fictive
  • deviation - Deviation de contexte
  • direct_assault - Assaut direct sur les instructions
  • extraction - Tentative d'exfiltration de donnees systeme
  • roleplay - Jailbreak par roleplay malveillant

Table aegis_jailbreak_patterns_i18n : Traductions multilingues des patterns.

Table aegis_language_metrics : Metriques statistiques precalculees par langue (longueur moyenne, ecart-type, frequences de mots, n-grams).

5.2 Administration #

Le plugin aegis_corpus fournit une interface d'administration complete :

  • CRUD des patterns (AegisPatternManager)
  • Gestion des traductions (manuelle + auto-traduction IA)
  • Recalcul des metriques (AegisAnalyzer)
  • Statistiques et rapports globaux

Acces : ?obj=aegis_corpus.php (necessite AEGIS_CORPUS_LEVEL_ADMIN)

6. Integration MCP

Depuis la version 3.0.0 du dispatcher MCP, tous les appels tools passent par ContextGuardian.

Flux #

text
LLM --JSON-RPC--> MCP::callTool()
  |
  +-- extractStrings(arguments)
  |     Extraction recursive de toutes les chaines >= 5 caracteres
  |
  +-- Pour chaque chaine : LLMFirewall::filter_input()
  |     Si null -> erreur -32603 "ContextGuardian: request blocked"
  |
  +-- Tool::run(arguments)
  |
  +-- Pour chaque result.content[].text : LLMFirewall::filter_output()
  |     Filtrage du contenu retourne au LLM
  |
  +-- JSON-RPC response

Code d'erreur #

CodeSignification
-32603Requete bloquee par ContextGuardian

Degradation gracieuse #

Si LLMFirewall n'est pas disponible (aegis_corpus non installe), le MCP fonctionne normalement sans filtrage. Le chargement est lazy et verifie via class_exists().

7. Configuration

Les seuils sont configures dans llm_connector.conf.inc.php :

CleDefautDescription
AEGIS_INPUT_THRESHOLD0.7Seuil de blocage des entrees
AEGIS_OUTPUT_THRESHOLD0.85Seuil de blocage des sorties

Le seuil output est volontairement plus eleve que l'input : le LLM peut utiliser un vocabulaire "sensible" dans un contexte pedagogique legitime.

8. Tables de journalisation

aegis_detection_log #

Toutes les detections (bloquees ou non) :

ChampDescription
user_idUtilisateur concerne
prompt_hashSHA-256 du prompt (pas le contenu brut)
detected_languageLangue detectee
suspicion_scoreScore de suspicion
matched_patternsPatterns correspondants (JSON)
action_takenblocked / warned / allowed

llm_connector_output_anomalies #

Anomalies detectees en sortie :

ChampDescription
session_idSession LLM
anomaly_typeinjection_attempt / repetition / encoding_error
severitylow / medium / high / critical
metadataDetails supplementaires (JSON)

9. Detection d'encodage avancee

LLMFirewall inclut une detection de patterns d'encodage suspects :

  • Sequences UTF-8 overlong (exploitation classique \xC0\x80)
  • Surrogates UTF-16 invalides en UTF-8 (tentative de bypass)
  • Caracteres de controle invisibles en masse (> 5% du texte)
  • Zero-width characters en quantite (> 10 occurrences : \u200B, \u200C, \u200D, \uFEFF)

Ces patterns sont des vecteurs connus d'injection epinumerique.

10. Differences avec les solutions existantes

CritereOpenAI Moderation / Llama GuardContextGuardian
DirectionUnidirectionnelle (IN ou OUT)Bidirectionnelle
ReglesStatiquesCorpus evolutif + apprentissage
Corpus de menacesNonStructure, multilingue, versionne
Injection preventiveNonIPC (Injection Preventive de Contexte)
ScoringBinaireAdaptatif (0.0 - 1.0)
IntegrationAPI externeNatif dans le framework
de en es fr pt