Capacité

GraphQL Deep Inspection

Ne traitez pas le trafic GraphQL comme un simple corps POST — détectez les patterns d'introspection, de DoS imbriqué et de query batching à l'intérieur de votre WAAP.

TR7 GraphQL Deep Inspection ne traite pas le trafic GraphQL de la même façon que REST. Un seul endpoint GraphQL transporte généralement plusieurs opérations, des requêtes imbriquées, des variables et des structures de query batching — les contrôles de sécurité qui s'arrêtent au niveau de l'URL et de la méthode laissent des risques critiques invisibles. TR7 WAAP utilise la détection basée sur les signatures pour capturer les tentatives d'introspection, les patterns de requêtes excessivement imbriquées et les comportements de query batching. Les règles enrichies TR7 50100, 50101 et 50102 se concentrent respectivement sur la fuite de schéma, le DoS par requête imbriquée et l'abus de batch query. Les contrôles GraphQL peuvent s'exécuter sur les portées query, raw, json et form. Pour les endpoints tels que `/graphql`, la politique de sécurité peut être renforcée avec des allow-lists de méthodes, des contrôles de clés JSON autorisées, des limites de taille du corps et des règles personnalisées. Le résultat : TR7 ne prétend pas disposer d'un parseur natif ni d'une inspection de champs schema-aware — mais il rend les risques GraphQL les plus courants en production (introspection, DoS imbriqué, query batching) visibles et gérables dans le moteur de signatures WAAP.

3
Règles GraphQL enrichies TR7 : 50100 introspection, 50101 DoS imbriqué, 50102 batch
5+
Variantes GraphQL waf_db : famille 21360 et variantes d'introspection
4
Portées d'inspection : query, raw, json, form

GraphQL expose trop de capacités via un seul endpoint — la logique WAAP classique en manque la plupart.

Dans le trafic REST, l'endpoint, la méthode et le chemin décrivent généralement ce que fait une requête. Dans GraphQL, ces informations résident principalement dans le corps. Le même endpoint `/graphql` peut transporter des lectures, des écritures, des requêtes imbriquées, de l'introspection, des fragments et des opérations pilotées par des variables. Une couche de sécurité qui ne vérifie que l'URL et la méthode ne peut pas voir ce que GraphQL fait réellement.

Lorsque l'introspection GraphQL reste ouverte en production, le schéma de l'application peut fuiter. Un attaquant qui apprend quels types, champs et relations existent peut élaborer des requêtes beaucoup plus ciblées. Ce n'est peut-être pas une exfiltration directe de données, mais c'est une divulgation d'informations sérieuse qui cartographie la surface d'attaque.

Les requêtes imbriquées et les fragments créent un risque différent. Des requêtes excessivement imbriquées peuvent imposer une lourde charge de traitement au backend avec une seule requête HTTP. Le rate limiting standard compte les requêtes — il ne voit pas le coût d'une seule requête. Dans GraphQL, le risque de DoS vient généralement de la structure de la requête, pas du volume de requêtes.

Le query batching produit un fossé similaire. Lorsque plusieurs requêtes sont envoyées dans un seul corps, le trafic ressemble à une seule requête HTTP de l'extérieur, mais plusieurs opérations peuvent s'exécuter à l'intérieur. Cela compromet les contrôles de sécurité classiques basés sur le rate limit et les endpoints.

TR7 GraphQL Deep Inspection examine le trafic GraphQL avec des règles WAAP basées sur les patterns : les comportements d'introspection, de DoS par profondeur imbriquée et de query batching sont détectés sur les portées query, raw, json et form et liés aux politiques de production.

Notre approche

TR7 aborde la sécurité GraphQL non pas en revendiquant une conscience du schéma, mais en intégrant les patterns d'abus GraphQL les plus courants en production dans le moteur de signatures WAAP.

Les patterns d'introspection peuvent être bloqués en production

TR7 capture les indicateurs d'introspection tels que `__schema`, `__type`, `IntrospectionQuery` et `fragment FullType` à l'aide de règles basées sur la regex. Ces règles peuvent s'exécuter en mode blocage en production et en mode surveillance ou à un score plus bas en qualification.

Les patterns de DoS par requêtes imbriquées sont scorés et capturés

Les requêtes GraphQL excessivement imbriquées peuvent générer une lourde charge de traitement avec une seule requête. La famille de règles TR7 50101 détecte les chaînes `{ ... { ... } }` profondes au niveau du pattern et les inclut dans la décision WAAP avec un score élevé.

Le comportement de query batching devient visible sous une seule requête

Envoyer plusieurs requêtes dans un seul corps peut compromettre la logique classique de rate limit. La règle TR7 50102 détecte les patterns de batch query et permet de lier ce comportement à une décision de journalisation, de scoring ou de blocage.

L'inspection de la portée du corps recherche les payloads GraphQL dans plusieurs emplacements

Une requête GraphQL peut être transportée non seulement dans le corps brut mais aussi dans des champs JSON, de formulaire ou de chaîne de requête. Les règles TR7 s'exécutent sur les portées query, raw, json et form, mettant les différentes implémentations client sous la même politique WAAP.

Capacités

GraphQL Deep Inspection gère les risques spécifiques à GraphQL avec des règles WAAP basées sur les signatures, la sélection de portées et des contrôles de renforcement des endpoints.

La règle TR7 50100 détecte les tentatives d'introspection GraphQL

La règle 50100 cible les patterns couramment utilisés dans l'introspection GraphQL : `__schema`, `__type`, `IntrospectionQuery` et `fragment FullType`. Le niveau de risque par défaut est positionné comme un signal de force moyenne et peut être évalué à un score de 4. Sur les endpoints où l'introspection doit être fermée en production, cette règle peut s'exécuter en mode blocage ou surveillance. Les tentatives de découverte de schéma deviennent visibles dans le flux d'événements WAAP.

La règle TR7 50101 se concentre sur les patterns de DoS par requêtes imbriquées

La règle 50101 détecte les requêtes GraphQL excessivement imbriquées au niveau du pattern. Des chaînes `{` profondes et des structures fortement imbriquées peuvent faire en sorte qu'une seule requête impose un coût de traitement élevé au backend. Cette règle peut être évaluée à un score de 6 comme signal d'attaque plus fort. L'objectif n'est pas d'effectuer un calcul de complexité schema-aware — c'est de capturer tôt les patterns de requêtes imbriquées dangereux.

La règle TR7 50102 capture les abus de query batching

La règle 50102 détecte les patterns de batch où plusieurs requêtes sont envoyées dans un seul corps. Étant donné que le query batching peut être légitime pour certains clients, l'état et les valeurs de score de la règle doivent être ajustés au comportement de l'application. Démarrer en mode surveillance et clarifier avec l'observation du trafic réel est la bonne approche. Une fois l'abus confirmé, la règle peut être déplacée vers une politique de blocage.

Les variantes GraphQL waf_db étendent la couverture des patterns d'introspection et imbriqués

En plus des règles enrichies TR7, waf_db contient des variantes GraphQL telles que les familles 50100, 50101 et 21360+. Ces variantes couvrent des orthographes alternatives telles que `__schema {`, `__type`, `__typename` et les patterns de mutation imbriqués. Cela construit une surface de signature plus large pour les comportements d'introspection et de requêtes imbriquées sans dépendre d'une seule regex. Les opérateurs peuvent remplacer l'état et le score de ces règles par service.

Les portées query, raw, json et form couvrent différents formats de transport

Les requêtes GraphQL n'arrivent pas toujours dans le même format. Certains clients envoient les champs `query`, `variables` et `operationName` dans un corps JSON ; d'autres peuvent utiliser le corps brut ou les champs de formulaire. Les règles TR7 s'exécutent sur les portées query, raw, json et form, mettant ces différents formats de transport sous la couverture d'inspection. Cela réduit l'erreur de ne faire confiance qu'à un seul format de corps sur les endpoints GraphQL.

Le même modèle de règles s'applique aux cibles api endpoint et web application

Les contrôles GraphQL peuvent être appliqués aux cibles api_endpoint et web_application. Le même modèle de règles WAAP peut être géré avec des valeurs d'état, de score ou de portée différentes selon le type de service. Par exemple, l'introspection peut rester en mode surveillance sur un endpoint de test interne tout en étant bloquée sur un endpoint de production public. Cette flexibilité permet à un seul ensemble de règles d'être adapté à différentes politiques d'environnement.

StructureRuleDB peut restreindre le comportement de l'endpoint GraphQL

Des contrôles peuvent être définis pour l'endpoint `/graphql` tels que n'autoriser que la méthode POST, restreindre les clés JSON attendues à `query`, `variables` et `operationName`, ou appliquer une limite de taille du corps. Ces contrôles ne remplacent pas les signatures GraphQL — ils constituent une couche de sécurité positive qui les complète. Les méthodes inattendues ou les champs JSON inattendus peuvent être rejetés à un stade précoce, rendant le comportement de l'endpoint plus prévisible.

Les règles personnalisées peuvent ajouter des patterns GraphQL spécifiques à l'application

Si le trafic GraphQL inclut des patterns de mutation spécifiques à l'application, des noms de champs ou des noms d'opérations risqués, ils peuvent être ajoutés comme règles WAAP personnalisées. Par exemple, un mot-clé `mutation` spécifique ou un nom d'opération sensible apparaissant dans le corps peut se voir attribuer un score plus élevé. Ces règles personnalisées participent au système de scoring WAAP principal et sont visibles dans le flux de journaux et SIEM. Même sans inspection de champs schema-aware, les risques spécifiques à l'application peuvent être capturés avec des règles basées sur les patterns.

Profondeur opérationnelle

GraphQL Deep Inspection est basé sur les signatures dans ses capacités réelles actuelles — le parsing des opérations, le calcul de complexité et les revendications de WAAP de champs schema-aware sont hors périmètre de cette page.

01

Inspection basée sur les patterns

Les contrôles GraphQL fonctionnent avec une approche de détection de patterns basée sur la regex et les portées. La différenciation des types d'opérations, un vrai compteur de profondeur ou le calcul d'un score de complexité de requête ne font pas partie de ce modèle. Cette distinction est particulièrement importante pour un positionnement précis.

02

Remplacement d'état et de score

Les règles 50100, 50101, 50102 et les variantes waf_db peuvent être définies sur enabled, monitor ou disabled selon les besoins du service. Les valeurs de score peuvent également être ajustées à la tolérance aux faux positifs de l'application. Le bon modèle de déploiement pour les endpoints GraphQL de production est de démarrer en mode surveillance et de passer au blocage après observation du trafic réel.

03

Renforcement des endpoints

Une allow-list de méthodes, une allow-list de clés JSON et une limite de taille du corps peuvent être appliquées sur les endpoints GraphQL. Ces contrôles garantissent que la forme de la requête est conforme au contrat attendu en complément de la détection par signatures. Sur les API publiques en particulier, n'accepter que le format attendu sur l'endpoint `/graphql` réduit la surface d'attaque.

04

Limite de rate limit

Le rate limiting par opération n'est pas appliqué au niveau du parseur GraphQL. Il n'y a aucune revendication de parser sémantiquement le nombre d'opérations dans un seul corps et d'appliquer une limite séparée à chacune. Le pattern de query batching peut être capturé comme signature et utilisé en parallèle avec les politiques générales de rate limit.

05

Portée des requêtes persistées

Il n'y a pas de prise en charge dédiée des requêtes persistées dans cette capacité. Les patterns GraphQL visibles dans la requête sont inspectés avec les signatures WAAP. La résolution d'une requête depuis son hash et sa vérification par rapport au schéma ou aux données d'opération enregistrées n'est pas revendiquée sur cette page.

06

Modèle non schema-aware

L'inspection native au niveau d'un champ de schéma GraphQL spécifique — par exemple `User.email` — n'est pas effectuée. Les règles fonctionnent avec une approche de correspondance de patterns sur le corps. S'il y a des exigences spécifiques aux champs, elles doivent être traitées de manière limitée et prudente avec une règle regex personnalisée.

Quand l'utiliser

Blocage de l'introspection sur un endpoint GraphQL de production

Une équipe sécurité peut autoriser l'introspection en qualification tout en exécutant la règle 50100 en mode blocage sur l'endpoint de production. Les tentatives de découverte de schéma sont journalisées, scorées et bloquées par politique.

Blocage des tentatives de DoS par fragments imbriqués avec scoring

Des fragments ou structures de requêtes excessivement imbriqués peuvent imposer un coût de traitement élevé au backend. La règle 50101 capture ces patterns avec un score de 6, fournissant un signal fort pour la décision de blocage WAAP.

Détection d'une attaque de query batching sur une API mobile

Lorsque de nombreuses requêtes sont tentées dans une seule requête vers un endpoint client mobile, la règle 50102 détecte le pattern de batch. L'équipe opérationnelle peut observer le comportement en mode surveillance en premier et passer en mode activé une fois l'abus confirmé.

Allow-list de méthodes et de clés JSON pour un endpoint GraphQL

Une équipe API peut n'autoriser que la méthode POST et les champs JSON `query`, `variables` et `operationName` sur l'endpoint `/graphql`. Les méthodes ou champs inattendus sont rejetés avant d'atteindre l'application, réduisant le comportement de l'endpoint.

Questions fréquentes

Le support GraphQL de TR7 est-il un parseur natif ou basé sur les patterns ?
Il est basé sur les patterns. TR7 n'exécute pas de parseur d'opérations dédié ni de moteur de conscience du schéma pour GraphQL. Les règles enrichies 50100, 50101 et 50102 fonctionnent avec la détection de patterns basée sur la regex et les portées. La différenciation des types d'opérations, un vrai compteur de profondeur ou le calcul de complexité de requête ne font pas partie de ce modèle. L'approche est conçue pour capturer les risques les plus courants en production : introspection, DoS imbriqué et query batching.
Puis-je fermer complètement l'introspection en production ?
Oui. La règle 50100 cible les patterns `__schema`, `__type`, `IntrospectionQuery` et `fragment FullType`. Il est possible d'exécuter cette règle en mode blocage sur l'endpoint de production et en mode surveillance sur l'endpoint de qualification. Les tentatives de découverte de schéma deviennent visibles dans le flux d'événements WAAP et sont bloquées par politique.
La détection de query batching cause-t-elle des problèmes pour un usage légitime ?
Le query batching peut être légitime pour certains clients. Pour cette raison, il est recommandé de démarrer la règle 50102 en mode surveillance et d'observer le comportement du trafic réel plutôt que d'activer immédiatement le mode blocage. Une fois l'abus confirmé, la règle peut être déplacée vers la politique enabled ou blocage. L'état et les valeurs de score peuvent être remplacés par service.
Sur quelles portées les règles GraphQL s'exécutent-elles ?
Les règles GraphQL TR7 s'exécutent sur les portées query, raw, json et form. Que le payload GraphQL soit transporté dans un corps JSON, un corps brut ou des champs de formulaire, la même politique de signatures WAAP s'applique. Les différentes implémentations client sont mises sous un seul ensemble de règles.
Quelle est la différence entre les variantes waf_db et les règles enrichies ?
Les règles enrichies TR7 (50100, 50101, 50102) sont positionnées comme des règles primaires focalisées sur des patterns d'abus GraphQL spécifiques. Les variantes waf_db couvrent des orthographes alternatives telles que `__schema {`, `__typename` et `mutation.*{.*{.*{` ainsi que des patterns d'introspection supplémentaires. Ensemble, elles construisent une surface de signature plus large. Les opérateurs peuvent gérer les deux couches indépendamment selon les besoins du service.
Comment le renforcement de l'endpoint GraphQL est-il effectué avec StructureRuleDB ?
Avec StructureRuleDB, seule la méthode POST peut être autorisée sur l'endpoint `/graphql`, les clés JSON attendues peuvent être restreintes à `query`, `variables` et `operationName`, et une limite de taille du corps peut être appliquée. Ces contrôles ne remplacent pas la détection par signatures — ils constituent une couche de sécurité positive qui garantit que les requêtes avec des méthodes ou des champs inattendus sont rejetées avant d'atteindre les contrôles de signatures.

Connectez vos endpoints GraphQL au moteur de signatures WAAP

Rendez les risques d'introspection, de DoS imbriqué et de query batching visibles et gérables en production. Parcourons ensemble une configuration en direct sur vos propres services.