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
This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.jsonthreatprotection.ExecutionFailed |
500 |
The JSONThreatProtection policy can throw many different types of ExecutionFailed errors.
Most of these errors occur when a specific threshold set in the policy is exceeded. These
types of errors include:
object entry name length,
object entry count,
array element count,
container depth,
string string value length.
This error also occurs when the payload contains an
invalid JSON object.
|
build |
steps.jsonthreatprotection.SourceUnavailable |
500 |
This error occurs if the message
variable specified in the <Source> element is either:
|
build |
steps.jsonthreatprotection.NonMessageVariable |
500 |
This error occurs if the <Source> element is set to a variable which
is not of type
message.
|
build |
Deployment errors
None.
Fault variables
These variables are set when this policy triggers an error. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "SourceUnavailable" |
jsonattack.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | jsonattack.JTP-SecureRequest.failed = true |
Example error response
{ "fault": { "faultstring": "JSONThreatProtection[JPT-SecureRequest]: Execution failed. reason: JSONThreatProtection[JTP-SecureRequest]: Exceeded object entry name length at line 2", "detail": { "errorcode": "steps.jsonthreatprotection.ExecutionFailed" } } }
Example fault rule
<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