Règle JSONThreatProtection

Cette page s'applique à Apigee et à Apigee hybrid.

Consultez la documentation d'Apigee Edge.

icône de la règle

Quoi

Réduit le risque d'attaques au niveau du contenu en vous permettant de spécifier des limites sur différentes structures JSON, telles que des tableaux et des chaînes.

Cette règle est une règle extensible et son utilisation peut avoir des conséquences sur le coût ou l'utilisation, en fonction de votre licence Apigee. Pour en savoir plus sur les types de règles et les implications en termes d'utilisation, consultez la section Types de règles.

Vidéo : Visionnez une courte vidéo pour savoir comment la règle JSONThreatProtection vous permet de sécuriser les API contre les attaques au niveau du contenu.

Vidéo : Visionnez cette courte vidéo sur la plate-forme de gestion d'API sur plusieurs clouds d'Apigee.

Documentation de référence des éléments

La documentation de référence des éléments décrit les éléments et les attributs de la règle de protection contre les menaces JSON.

<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
   <DisplayName>JSONThreatProtection 1</DisplayName>
   <ArrayElementCount>20</ArrayElementCount>
   <ContainerDepth>10</ContainerDepth>
   <ObjectEntryCount>15</ObjectEntryCount>
   <ObjectEntryNameLength>50</ObjectEntryNameLength>
   <Source>request</Source>
   <StringValueLength>500</StringValueLength>
</JSONThreatProtection>

Attributs <JSONThreatProtection>

<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1"> 

Le tableau suivant décrit les attributs communs à tous les éléments parents des règles :

Attribut Description Par défaut Presence
name

Nom interne de la règle. La valeur de l'attribut name peut contenir des lettres, des chiffres, des espaces, des tirets, des traits de soulignement et des points. Cette valeur ne peut pas dépasser 255 caractères.

Vous pouvez également utiliser l'élément <DisplayName> pour ajouter un libellé à la règle dans l'éditeur de proxy de l'interface utilisateur de gestion, en utilisant un nom différent, en langage naturel.

N/A Obligatoire
continueOnError

Définissez sur false pour afficher une erreur en cas d'échec d'une règle. Il s'agit du comportement attendu pour la plupart des règles.

Définissez sur true pour que l'exécution du flux se poursuive même après l'échec d'une règle. Voir également :

false Facultatif
enabled

Définissez sur true pour appliquer la règle.

Définissez sur false pour désactiver la règle. La stratégie ne sera pas appliquée, même si elle reste associée à un flux.

true Facultatif
async

Cet attribut est obsolète.

false Obsolète

Élément <DisplayName>

Utilisez-le, en plus de l'attribut name, pour appliquer un libellé à la règle dans l'éditeur de proxys de l'interface de gestion en utilisant un nom différent, en langage naturel.

<DisplayName>Policy Display Name</DisplayName>
Par défaut

N/A

Si vous omettez cet élément, la valeur de l'attribut name de la règle est utilisée.

Presence Facultatif
Type Chaîne

Élément <ArrayElementCount>

Indique le nombre maximal d'éléments autorisés dans un tableau.

<ArrayElementCount>20</ArrayElementCount>
Valeur par défaut : Si vous ne spécifiez pas cet élément, ou si vous spécifiez un entier négatif, le système n'applique pas de limite.
Présence : Facultatif
Type : Entier

Élément <ContainerDepth>

Spécifie la profondeur maximale autorisée du conteneur (les conteneurs étant des objets ou des tableaux). Par exemple, un tableau contenant un objet contenant lui-même un objet donnerait une profondeur de conteneur de 3.

<ContainerDepth>10</ContainerDepth>
Valeur par défaut : Si vous ne spécifiez pas cet élément ou si vous spécifiez un entier négatif, le système n'applique aucune limite.
Présence : Facultatif
Type : Entier

Élément <ObjectEntryCount>

Spécifie le nombre maximal d'entrées autorisées dans un objet.

<ObjectEntryCount>15</ObjectEntryCount>
Valeur par défaut : Si vous ne spécifiez pas cet élément ou si vous spécifiez un entier négatif, le système n'applique aucune limite.
Présence : Facultatif
Type : Entier

Élément <ObjectEntryNameLength>

Spécifie la longueur maximale de chaîne autorisée pour un nom de propriété dans un objet.

<ObjectEntryNameLength>50</ObjectEntryNameLength>
Valeur par défaut : Si vous ne spécifiez pas cet élément, ou si vous spécifiez un entier négatif, le système n'applique pas de limite.
Présence : Facultatif
Type : Entier

Élément <Source>

Message à analyser pour rechercher des attaques de charge utile JSON. Ce paramètre est habituellement défini sur request, car vous devez généralement valider les requêtes entrantes provenant des applications clientes. Lorsque ce paramètre est défini sur message, cet élément évalue automatiquement le message de requête lorsqu'il est associé au flux de la requête et le message de réponse lorsqu'il est associé au flux de réponse.

<Source>request</Source>
Valeur par défaut : requête
Présence : Facultatif
Type :

Chaîne.

Valeurs valides : requête, réponse ou message.

Élément <StringValueLength>

Spécifie la longueur maximale autorisée pour une valeur de chaîne.

<StringValueLength>500</StringValueLength>
Valeur par défaut : Si vous ne spécifiez pas cet élément, ou si vous spécifiez un entier négatif, le système n'applique pas de limite.
Présence : Facultatif
Type : Entier

Informations de référence sur les erreurs

Cette section décrit les codes d'erreur et les messages d'erreur renvoyés et les variables d'erreur définies par Apigee lorsque cette règle déclenche une erreur. Ces informations sont importantes si vous développez des règles de défaillance afin de gérer les pannes. Pour en savoir plus, consultez les pages Ce que vous devez savoir sur les erreurs liées aux règles et Gérer les pannes.

Erreurs d'exécution

Ces erreurs peuvent se produire lors de l'exécution de la règle.

Code d'erreur État HTTP Cause Corriger
steps.jsonthreatprotection.ExecutionFailed 500 La règle JSONThreatProtection peut générer de nombreux types d'erreurs ExecutionFailed. La plupart de ces erreurs se produisent lorsqu'un seuil spécifique défini dans la règle est dépassé. Ces types d'erreurs incluent les éléments suivants : longueur de noms d'entrée d'objet, nombre d'entrées d'objet, nombre d'éléments de tableau, profondeur de conteneur, longueur de valeur de chaîne. Cette erreur se produit également lorsque la charge utile contient un objet JSON non valide.
steps.jsonthreatprotection.SourceUnavailable 500 Cette erreur se produit si la variable message spécifiée dans l'élément <Source> :
  • est hors de portée (non disponible dans le flux spécifique où la règle est exécutée)
  • n'est pas une des valeurs valides request, response ou message.
steps.jsonthreatprotection.NonMessageVariable 500 Cette erreur se produit si l'élément <Source> est défini sur une variable qui n'est pas de type message.

Erreurs de déploiement

Aucune.

Variables de panne

Ces variables sont définies lorsque cette règle déclenche une erreur. Pour en savoir plus, consultez la section Ce que vous devez savoir sur les erreurs liées aux règles.

Variables Lieu Exemple
fault.name="fault_name" fault_name est le nom de l'erreur, tel qu'indiqué dans le tableau Erreurs d'exécution ci-dessus. Le nom d'erreur est la dernière partie du code d'erreur. fault.name Matches "SourceUnavailable"
jsonattack.policy_name.failed policy_name est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. jsonattack.JTP-SecureRequest.failed = true

Exemple de réponse d'erreur

{
  "fault": {
    "faultstring": "JSONThreatProtection[JPT-SecureRequest]: Execution failed. reason: JSONThreatProtection[JTP-SecureRequest]: Exceeded object entry name length at line 2",
    "detail": {
      "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
    }
  }
}

Exemple de règle de défaillance

<FaultRule name="JSONThreatProtection Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ExecutionFailed") </Condition>
    </Step>
    <Condition>(jsonattack.JPT-SecureRequest.failed = true) </Condition>
</FaultRule>

Schémas

Remarques sur l'utilisation

Tout comme les services basés sur XML, les API compatibles avec la notation d'objet JavaScript (JSON) sont vulnérables aux attaques au niveau du contenu. Les attaques JSON simples tentent d'utiliser des structures qui surchargent les analyseurs JSON pour faire planter un service et provoquer des attaques par déni de service au niveau de l'application. Tous les paramètres sont facultatifs et doivent être réglés de façon à optimiser les exigences de votre service contre les failles potentielles.

Articles associés

Règle JSONtoXML

Règle XMLThreatProtection

Règle de protection contre les expressions régulières