Cette page s'applique à Apigee et à Apigee hybrid.
Consultez la documentation d'Apigee Edge.
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 Vous pouvez également utiliser l'élément |
N/A | Obligatoire |
continueOnError |
Définissez sur Définissez sur |
false | Facultatif |
enabled |
Définissez sur Définissez sur |
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 |
---|---|
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.
|
build |
steps.jsonthreatprotection.SourceUnavailable |
500 |
Cette erreur se produit si la variable message spécifiée dans l'élément <Source> :
|
build |
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. |
build |
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 de protection contre les expressions régulières