Middleware & Sécurité

Middleware & Sécurité

Runique intègre des middlewares de sécurité configurables appliqués automatiquement dans l'ordre optimal via le système de slots.

ModuleDescription
Protection CSRFToken, Double Submit Cookie, AJAX
Content Security PolicyNonce, profils, headers
SessionsStore, durées, accès dans les handlers
Hosts & CacheAllowed Hosts, Cache-Control, headers de sécurité
Builder & configurationBuilder classique, Builder Intelligent, variables d'env
Rate LimitingLimitation de débit par IP, par route, configurable
Login RequiredProtection de routes — redirige si non authentifié
CORSCross-Origin Resource Sharing — origines, credentials, preflight
Proxies de confianceIP client réelle, RFC 1918, CIDR, ClientIp
Permissions-PolicyRestrictions d'API navigateur par header HTTP
Open RedirectBlocage automatique des redirections vers des origines externes
Anti-Bot HoneypotChamp piège invisible — rejet automatique des bots

Stack d'exécution

Requête entrante
    ↓
slot  0  Extensions          → Injection Engine, Tera, Config (toujours actif)
slot  2  TrustedProxies      → IP client réelle depuis X-Forwarded-For (toujours actif)
slot  5  Compression         → Compression des réponses (toujours actif)
slot  8  CORS                → Cross-Origin Resource Sharing (si with_cors() configuré)
slot 10  ErrorHandler        → Capture et rendu des erreurs (toujours actif)
slot 15  HostValidation      → Validation des hosts autorisés (si with_allowed_hosts() configuré)
slot 20+ Custom              → Vos middlewares personnalisés
slot 25  OpenRedirect        → Blocage redirections externes (toujours actif)
slot 30  SecurityHeaders     → X-Frame-Options, HSTS, Permissions-Policy… (toujours actif)
slot 31  CSP                 → Content Security Policy (conditionnel — voir note)
slot 40  Cache               → No-cache en développement (conditionnel, actif par défaut)
slot 50  Session             → Gestion des sessions (toujours actif)
slot 55  SessionUpgrade      → Upgrade session anonyme → authentifiée (toujours actif)
slot 57  Auth                → Chargement CurrentUser depuis la session (toujours actif)
slot 60  CSRF                → Protection Cross-Site Request Forgery (toujours actif)
slot 65  AntiBotHoneypot     → Champ piège invisible, force_invalid si rempli (si with_anti_bot() configuré)
    ↓
Handler (votre code)

Slots "toujours actif" : ces middlewares s'appliquent à toutes les requêtes sans configuration supplémentaire. Les autres ne s'insèrent dans la stack que si leur méthode builder correspondante est appelée.

Cas particulier CSP (slots 30/31) : le slot 30 (SecurityHeaders) émet déjà le header CSP par défaut, inconditionnellement — c'est lui qui écrit la réponse en dernier (couche la plus externe). Le slot 31 (CSP) ne s'insère que si enable_csp est activé, mais son propre header est de toute façon écrasé par celui du slot 30 juste après. .with_csp(...) sert donc à personnaliser la politique par défaut, pas à l'activer.