Des corps HTTP entrants sans plafond sont le vecteur le moins cher pour vider un budget LLM : un seul JSON multi‑mégaoctets peut forcer des mégatokens de tokenizer avant même que votre couche de validation JSON Schema réagisse. En 2026, publiez au bord de la passerelle OpenClaw des tailles d'entité maximales, des plafonds de profondeur d'analyse JSON et des limites stdout par outil, puis reliez ces chiffres aux mêmes manifestes que vos validateurs consomment déjà. Associez ces garde-fous aux seuils décrits dans disjoncteurs de passerelle OpenClaw pour outils amont instables afin que les violations répétées déclenchent un backoff protecteur plutôt qu'une saturation silencieuse du CPU.
Ce guide ancre des nombres défendables en post-mortem : 4 Mio de JSON entrant par défaut pour les sessions interactives, profondeur 32 pour les objets imbriqués sauf déclaration contraire dans les outils, 512 Kio d'aperçu tronqué pour les lectures fichiers sauf contrat explicite, et un budget de répétition d'environ 16,9 $ par jour sur un Mac mini Apple Silicon loué.
Pourquoi la passerelle doit rejeter tôt
La défense en profondeur empile TLS, reverse proxy et parseurs applicatifs—mais dès qu'un payload surdimensionné atteint votre tokenizer, l'électricité et la latence sont déjà dépensées. Des plafonds d'octets au niveau socket avec des lecteurs conservateurs garantissent que les attaquants paient surtout le round-trip sans occuper les créneaux modèle. Séparez clairement les motifs de rejet du bruit HTTP 502 amont pour garder les tuiles Grafana lisibles pendant les incidents.
Les opérateurs ont aussi besoin d'un langage commun : codes error stables, limites documentées et runbooks qui réutilisent les mêmes noms de variables que Terraform et les fragments LaunchAgent. Sans cette discipline, staging et production divergent chaque semaine et les partenaires d'intégration se perdent.
Enfin, rejeter tôt protège l'attention humaine : les équipes astreintes repèrent plus vite les abus lorsque les pics 413 se distinguent nettement des pannes amont et se corrélationnent aux clés API.
Corps HTTP et plafonds Content-Length
Coupez les requêtes dont le Content-Length dépasse la politique avant de streamer le reste ; pour des uploads chunked sans longueur, accumulez dans un tampon circulaire et arrêtez après 4 194 304 octets pour les voies interactives par défaut. Documentez des dérogations plus grandes uniquement pour des points d'import batch protégés par une authentification distincte et des métriques de profondeur de file.
| Voie | Corps max | Justification |
|---|---|---|
| Chat interactif | 4 Mio | JSON riche sans archives complètes |
| Webhook d'automatisation | 16 Mio | Événements groupés avec validation admin |
| Override opérateur | 64 Mio | En-tête signé + entrée d'audit obligatoire |
Les reverse proxies comme nginx doivent partager les mêmes limites pour éviter les divergences entre arrêts couche 4 et couche 7. Indiquez explicitement quelle composante répond en premier afin que les clients ne voient pas des messages contradictoires entre 413 et 502.
Profondeur JSON, longueur de tableaux et nombre de clés
Les parseurs doivent refuser des arbres plus profonds que 32 niveaux ou plus larges que 4096 emplacements de tableau par nœud sauf dérogation versionnée dans les manifestes. Ajoutez une limite de clés distinctes par objet (256) pour contrer les blobs de configuration déguisés en gadgets de pollution de prototype.
{
"error": "parse_depth_exceeded",
"limit_depth": 32,
"observed_depth": 41,
"request_id": "b7f2…",
"hint": "Aplatir la configuration ou scinder les appels d'outils"
}
Gardez les messages d'erreur courts et machine-lisibles ; les explications humaines appartiennent à la documentation, pas à chaque champ JSON, afin de garder des journaux compacts mais exploitables.
Sortie d'outils, troncature et streaming
Les outils shell et fichiers peuvent émettre des mégaoctets de stdout accidentel. Enveloppez les tubes de sous-processus avec des lecteurs qui passent en mode abandon après 524 288 octets sauf si l'outil déclare large_output:true. Lorsque vous streamez des jetons modèle vers le haut, respectez la pression de fenêtre TCP : suspendez la lecture outil lorsque les files internes dépassent 2 Mio de RAM combinée par worker sur une passerelle Mac mini 8 Gio.
Le streaming exige une sémantique claire pour « partiellement livré » : exposez truncated:true pour que le modèle n'invente pas un arbre de répertoires complet. Documentez comment les clients paginent ou appellent des points secondaires.
Pour les jobs longs, préférez des URL de téléchargement ou des handles d'objet plutôt que du Base64 inline, qui gonfle artificiellement les corps et aggrave les trois classes de limites à la fois.
Corps d'erreur structurés pour 413 et 400
Utilisez des codes error stables, reflétez les plafonds de politique, ne renvoyez jamais plus de 200 caractères UTF-8 contrôlés par l'attaquant. N'ajoutez retry_after_ms que pour la surcharge, pas pour l'abus, afin que les clients légitimes comprennent le backoff.
HTTP 400 doit distinguer erreurs d'analyse et violations sémantiques : JSON cassé versus échecs signalés par votre pipeline JSON Schema. Ne fusionnez pas ces chemins, sinon les équipes optimisent contre le mauvais signal.
Les équipes sécurité apprécient des codes d'erreur distincts pour « JSON invalide » et « arguments refusés par le schéma », car les playbooks de réponse diffèrent : le premier oriente vers des correctifs client, le second vers la gouvernance des manifestes.
Alignement avec les manifestes de schéma
Lorsque la passerelle valide déjà les arguments via JSON Schema, gardez maxLength et maxItems au moins aussi stricts que les plafonds transport pour échouer vite mais honnêtement—les clients voient des erreurs de schéma plutôt que des resets de socket opaques. Des jobs CI peuvent comparer manifestes et variables d'environnement pour empêcher la dérive.
Versionnez manifestes et builds passerelle ensemble : un bump semver sans limites synchronisées provoque souvent des tempêtes 413 après des déploiements censés ne changer que le routage modèle.
Tampons macOS, tubes et implications LaunchAgent
launchd hérite de tailles de tuyaux différentes des conteneurs Linux classiques ; répéter les scénarios sur macOS nu révèle des stdout qui remplissent plus vite que les goroutines ne drainent—ce qui impose un calibrage honnête des seuils haut-eau avant production. StandardOutPath peut devenir un goulot d'étranglement I/O ; séparez diagnostics et flux bruts d'outils.
La thermique Apple Silicon influence la charge parseur soutenue : le noyau peut réduire les fréquences ; vos SLO doivent inclure des mesures worst-case, pas seulement de courts benchmarks sur silicium froid.
Abus et contrôles adjacents au débit
Les attaques par payload arrivent rarement comme un POST géant unique—plus souvent des milliers de requêtes juste sous la limite qui épuisent quand même les parseurs. Mesurez rejection_rate_413 et rejection_rate_parse comme métriques de première classe avec alertes à 5 % sur cinq minutes et limitation automatique de jetons à 20 % pour la clé API fautive. Couplez avec des soldes multi-locataires pour éviter que le marketing affame l'exploitation plateforme.
Journalisez des échantillons pour la forensique mais jamais les corps rejetés complets : conservez un digest SHA-256 et au plus 1 024 premiers octets chiffrés, séparés des journaux applicatifs, expirant après 72 heures sans obligation légale.
Lorsque les sondes half-open des disjoncteurs se déclenchent, corrélez avec les statistiques de payload : parfois l'amont est innocent et un client spamme des JSON monstrueux syntaxiquement valides.
Tableau SLO pour décider des limiteurs
| Signal | Cible | Action |
|---|---|---|
| Latence médiane d'analyse | < 3 ms sur M4 pour 16 Kio JSON | Alerte si > 6 ms pendant 15 minutes |
| Ratio 413 | < 0,3 % en régime | Pager si > 2 % après déploiement |
| Lignes d'outil tronquées | < 1 % des appels | Demander pagination aux propriétaires d'outils |
Séquence de déploiement pour équipes prudentes
- Mode shadow : journaliser 48 h ce qui aurait été rejeté sans bloquer.
- Locataires canary : appliquer d'abord aux espaces internes.
- Resserrement progressif : ramener le corps interactif de 8 Mio à 4 Mio par train hebdomadaire.
- Vérification post-déploiement : comparer les deltas Prometheus au CPU de référence.
Documentez les valeurs par défaut à côté des variables d'environnement pour que Terraform et LaunchAgent restent synchronisés—rien n'érode la confiance plus vite qu'un staging qui accepte ce que la production rejette.
WebAssembly et chemins d'extension natifs
Certains équipes délèguent l'analyse JSON à du WASM ou des bibliothèques SIMD. Les plafonds passerelle doivent rester en dessous des promesses de crête de ces accélérateurs—Apple Silicon throttle sous charge thermique. Comparez caches froids et chauds : les premières requêtes peuvent être 40 % plus lentes si les caches d'instructions manquent après déploiement.
Conservez des repli vers parseurs bibliothèque standard si les sandboxes WASM doivent être coupées pour mémoire ; les caps doivent rester identiques dans les deux modes.
Contrats versionnés avec clients mobiles et desktop
Exposez les limites via un document /gateway/policy versionné avec la passerelle semver pour que Flutter, Electron ou Swift négocient sans constantes magiques. Incluez max_tool_output_preview_bytes pour que l'UX planifie la pagination des tableaux issus des outils.
Annoncez les ruptures au moins deux releases à l'avance via en-têtes de dépréciation et changelog alignés sur les noms de champs d'erreur JSON.
État partagé et compteurs Redis
Avec plusieurs workers passerelle, centralisez les compteurs glissants dans Redis avec TTL de cinq secondes pour la détection de rafales et des hachages horaires pour l'abus soutenu. Utilisez Lua pour garder incrément+vérification atomique—sinon des 429 erratiques confondent les retries légitimes.
Choisissez les politiques d'éviction avec soin : perdre des clés de quota vaut souvent mieux que perdre des jetons d'auth, documentez le compromis pour l'astreinte. Lors de bascules de cluster, les quotas peuvent se détendre brièvement—prévoyez des alertes de suivi.
Quand les fournisseurs augmentent les fenêtres de contexte du jour au lendemain, ne montez pas aveuglément les plafonds passerelle—revérifiez tokenizer et tableaux de bord après chaque hausse de politique.
Les runbooks doivent lier cette table de politique, les IDs de tableaux Grafana et le tag semver courant pour que les nouveaux intervenants évitent la connaissance tribale dans les fils de discussion.
Louer de la capacité Mac mini Apple Silicon via MacHTML aligne piles TLS, décodeurs et sémantique des tuyaux avec de nombreuses passerelles clients déjà sur macOS, plutôt que des hypothèses Linux-only qui mal dimensionnent les tampons. La thermique silencieuse et le gain prévisible sur un seul fil comptent lorsque vous mesurez des microsecondes d'analyse sous tempêtes 413 soutenues, pour environ 16,9 $ par jour d'OPEX contre du matériel amorti.
Des fenêtres de location élastiques permettent aussi de cloner les profils de limites de production dans un locataire isolé pour exercices red team sans risquer le staging partagé.
Chargez les limites passerelle sur macOS réel
Provisionnez un Mac mini cloud pour refléter limites d'analyse, journaux LaunchAgent et TLS avant de promouvoir des resserrements de politique.