Résoudre les problèmes liés aux erreurs d'exécution de la protection contre les menaces JSON

Vous consultez la documentation d'Apigee Edge.
Accédez à la documentation sur Apigee X.
info

ExecutionFailed

Code d'erreur

steps.jsonthreatprotection.ExecutionFailed

Corps de la réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]: error_description
          at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Types d'erreurs et causes possibles

La règle JSONThreatProtection peut générer de nombreux types d'erreurs ExecutionFailed. Le tableau ci-dessous répertorie les différents types d'erreurs et leurs causes possibles :

Type d'erreur Cause
Longueur de noms d'entrée d'objet dépassée La longueur maximale de chaîne autorisée dans le nom d'entrée d'un objet est dépassée.
Nombre d'entrées d'objet dépassé Le nombre maximal d'entrées autorisées dans un objet est dépassé.
Nombre d'éléments de tableau dépassé Le nombre maximal d'éléments autorisés dans un tableau est dépassé.
Profondeur de conteneur dépassée La profondeur des données imbriquées maximale autorisée est dépassée.
Longueur de valeur de chaîne dépassée La longueur maximale autorisée pour une valeur de chaîne est dépassée.
Objet JSON non valide La charge utile JSON d'entrée n'est pas valide.

Longueur de nom d'entrée d'objet dépassée

Corps de la réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded object entry name length at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Exemple de corps de réponse d'erreur

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

Cause

Cette erreur se produit si la charge utile du message d'entrée spécifiée par l'élément <Source> contient un objet JSON dont le nom de propriété dépasse la longueur maximale spécifiée dans l'élément <ObjectEntryNameLength>.

Par exemple, si l'élément <ObjectEntryNameLength> est spécifié comme étant dans la stratégie 5, mais que la charge utile du message d'entrée possède une propriété JSON dont le nom dépasse 5 caractères, cette erreur est renvoyée.

Diagnostic

  1. Examinez le message d'erreur pour identifier le nom de la règle JSONThreatProtection et le numéro de ligne où le nom d'entrée long réside. Par exemple, dans le message d'erreur suivant, le nom de la règle JSONThreatProtection est JSON-Threat-Protection-1 et le numéro de ligne de la charge utile est 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. Examinez la stratégie que vous avez identifiée à l'étape 1 et notez la valeur spécifiée dans l'élément <ObjectEntryNameLength>.

    Par exemple, dans la règle JSONThreatProtection suivante, <ObjectEntryNameLength> est défini sur 5 :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>5</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Examinez le numéro de ligne spécifique (identifié à l'étape 1) de la charge utile d'entrée et vérifiez si la longueur du nom d'objet est supérieure à la valeur spécifiée dans l'élément <ObjectEntryNameLength> (identifié à l'étape 2). Si la longueur du nom de l'objet dépasse ce nombre, alors c'est la cause de l'erreur qui s'est produite.

    Voici un exemple de charge utile d'entrée :

    {
       "number" : 500,
       "string" : "text"
    }
    

    La charge utile JSON indiquée ci-dessus possède une propriété nommée number à la ligne 2 qui comporte 6 caractères (la longueur du nom est 6). Comme la longueur du nom de l'objet est supérieure à 5 (la valeur spécifiée pour l'élément <ObjectEntryNameLength>), l'erreur suivante s'affiche :

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    

Solution

Si la règle JSONThreatProtection a été conçue pour protéger contre les charges utiles avec des noms d'entrée d'objet dépassant la valeur définie, le message d'erreur est alors attendu. Dans ce cas, aucune autre action n'est requise.

Toutefois, si vous décidez que les noms d'entrée d'objet plus longs peuvent être spécifiés dans les charges utiles sans conséquences, définissez <ObjectEntryNameLength> sur une valeur appropriée en fonction de vos besoins.

Par exemple, si vous pensez que vous pouvez autoriser des noms d'objets d'une longueur maximale de 10 caractères, modifiez la stratégie JSONThreatProtection comme suit :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>10</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Nombre d'entrées d'objet dépassé

Corps de la réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded object entry count at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Exemple de corps de réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded object entry count at line 7",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Cause

Cette erreur se produit si la charge utile du message d'entrée spécifiée par l'élément <Source> contient un objet JSON contenant avec plus d'entrées (propriétés) que la valeur spécifiée dans l'élément <ObjectEntryCount> de la stratégie.

Par exemple, cette erreur est générée si l'élément <ObjectEntryCount> comporte la valeur 5 alors que la charge utile JSON d'entrée comporte plus de 5 entrées.

Diagnostic

  1. Examinez le message d'erreur pour identifier le nom de la règle JSONThreatProtection et le numéro de ligne dans lequel le nombre d'entrées est dépassé. Par exemple, dans le message d'erreur suivant, le nom de la règle est JSON-Threat-Protection-1 et le numéro de ligne de la charge utile est 7 :

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. Notez la valeur spécifiée dans l'élément <ObjectEntryCount> de la règle (identifié à l'étape 1).

    Dans l'exemple de stratégie suivant, <ObjectEntryCount> est défini sur 5 :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>6</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Examinez le numéro de ligne spécifique (identifié à l'étape 1) de la charge utile d'entrée et vérifiez si le nombre d'entités de la charge utile est supérieur à la valeur spécifiée pour l'élément <ObjectEntryCount> (identifié à l'étape 2). Si le nombre d'objets dépasse le nombre d'entrées d'objet, cela est à l'origine de l'erreur.

    Voici un exemple de charge utile d'entrée :

    {
    "name" : "John",
    "id" : 234687,
    "age" : 31,
    "city" : "New York",
    "country" : "USA",
    "company" : "Google"
    }
    

    Dans la charge utile JSON illustrée ci-dessus, la 6e entrée se produit à la ligne 7 (entreprise). Étant donné que le nombre d'entrées d'objet dans la charge utile JSON d'entrée est supérieur à 5 (valeur spécifiée pour l'élément <ObjectEntryCount>), vous obtenez l'erreur suivante :

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count at
    line 7
    

Solution

Si la règle JSONThreatProtection a été conçue pour protéger contre les charges utiles avec un nombre d'entrée d'objet dépassant un seuil spécifique, le message d'erreur est alors attendu. Dans ce cas, aucune action supplémentaire n'est requise de votre part.

Toutefois, si vous pensez pouvoir inclure davantage d'entrées d'objet dans la charge utile sans aucune conséquence, remplacez <ObjectEntryCount> par une valeur adaptée à vos besoins.

Par exemple, si vous pensez pouvoir autoriser jusqu'à 10 entrées d'objets, modifiez la règle JSONThreatProtection comme suit :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>10</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Nombre d'éléments de tableau dépassé

Corps de la réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded array element count at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Exemple de corps de réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded array element count at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Cause

Cette erreur se produit si la charge utile du message d'entrée spécifiée par l'élément <Source> contient un tableau JSON avec un nombre d'éléments supérieur au nombre spécifié dans l'élément <ArrayElementCount> de la règle.

Par exemple, si l'élément <ArrayElementCount> est défini sur 3, mais que la charge utile d'entrée contient un tableau JSON comportant plus de trois espaces de noms, cette erreur est générée.

Diagnostic

  1. Examinez le message d'erreur pour identifier le nom de la règle et le numéro de ligne où la longueur du tableau est dépassée. Par exemple, dans le message d'erreur suivant, le nom de la règle est JSON-Threat-Protection-1 et le numéro de ligne de la charge utile est 3 :

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. Notez la valeur spécifiée pour l'élément <ArrayElementCount> de la règle (identifié à l'étape 1).

    Dans l'exemple de règle JSONThreatProtection suivant, <ArrayElementCount> est défini sur 3 :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>6</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Examinez le numéro de ligne spécifique (identifié à l'étape 1) de la charge utile d'entrée et vérifiez si le tableau spécifié contient un nombre supérieur à celui spécifié dans l'élément <ArrayElementCount> (identifié à l'étape 2). Si le nombre d'éléments de tableau est supérieur à ce nombre, c'est la cause de l'erreur.

    Voici un exemple de charge utile d'entrée :

    {
     "name":"Ford",
     "models":[
        "Mustang",
        "Endeavour",
        "Fiesta",
        "EcoSport",
        "Focus"
     ]
    }
    

    La charge utile JSON ci-dessus contient cinq éléments dans le tableau nommé models à la ligne 3. Comme le nombre d'éléments de tableau est supérieur à 3 (la valeur spécifiée pour l'élément <ArrayElementCount>), vous obtenez l'erreur suivante :

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count
    at line 3
    

Solution

Si la règle JSONThreatProtection a été conçue pour protéger contre les charges utiles avec un seuil de nombre de tableaux spécifique, le message d'erreur est attendu. Dans ce cas, aucune autre action n'est requise.

Toutefois, si vous pensez qu'un nombre plus élevé d'éléments dans un tableau peut être autorisé, remplacez <ArrayElementCount> par une valeur appropriée, en fonction de vos besoins.

Par exemple, si vous pensez pouvoir autoriser jusqu'à cinq éléments de tableau, modifiez la règle comme suit :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>5</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Profondeur de conteneur dépassée

Corps de la réponse d'erreur

Le trafic de l'environnement d'exécution renvoie un code de réponse 500 avec l'erreur suivante :

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded container depth at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Exemple de corps de réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded container depth at line 5",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Cause

Cette erreur se produit si la charge utile du message d'entrée spécifiée par l'élément <Source> contient un objet JSON contenant lui-même des éléments JSON avec une profondeur de conteneur qui dépasse la profondeur maximale de conteneur spécifiée dans l'élément <ContainerDepth> de la règle. La profondeur de conteneur correspond à la profondeur imbriquée maximale autorisée pour les éléments JSON. Par exemple, un tableau contenant un objet contenant lui-même un objet donnerait une profondeur de conteneur de 3.

Par exemple, si l'élément <ContainerDepth> est défini sur 3, mais que la charge utile de l'entrée présente une profondeur de conteneur qui dépasse cette limite, cette erreur est générée.

Diagnostic

  1. Examinez le message d'erreur pour identifier le nom de la règle JSONThreatProtection et le numéro de ligne où la profondeur de conteneur est dépassée. Par exemple, dans le message d'erreur suivant, le nom de la règle est JSON-Threat-Protection-1 et le numéro de ligne de la charge utile est 5.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. Notez la valeur spécifiée pour l'élément <ContainerDepth> (identifié à l'étape 1).

    Dans l'exemple de règle JSONThreatProtection suivant, <ContainerDepth> est défini sur 5 :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Examinez le numéro de ligne spécifique (identifié à l'étape 1) de la charge utile d'entrée et vérifiez si la profondeur de conteneur dans la charge utile est supérieure à la valeur spécifiée dans l'élément <ContainerDepth> (identifié à l'étape 2). Si la profondeur de conteneur dépasse le nombre, il s'agit de la cause de l'erreur.

    Voici un exemple de charge utile d'entrée :

    {
     "ContainerDepth2":[ {
           "ContainerDepth4":[
              {
                 "ContainerDepth6":[
                    "1",
                    "2"
                 ]
              }
           ]
        }
     ]
    }
    

    La charge utile JSON ci-dessus a une profondeur de conteneur de 6 à la ligne 5. Comme la profondeur est supérieure à 5, la valeur spécifiée pour l'élément <ContainerDepth> de la règle JSONThreatProtection vous obtenez l'erreur suivante :

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    

Solution

Si la règle JSONThreatProtection a été conçue pour protéger contre les charges utiles dont les profondeurs de conteneur dépassent la valeur spécifiée, le message d'erreur est attendu. Dans ce cas, aucune autre action n'est requise.

Toutefois, si vous pensez qu'une profondeur de conteneur plus élevée est acceptable, remplacez <ContainerDepth> par une valeur adaptée à vos besoins.

Par exemple, si vous pensez pouvoir autoriser des profondeurs de conteneur jusqu'à 10, modifiez la règle comme suit :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>10</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Longueur de valeur de chaîne dépassée

Corps de la réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded string value length at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Exemple de corps de réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded string value length at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Cause

Cette erreur se produit si la charge utile du message d'entrée spécifiée par l'élément <Source> contient des éléments JSON ayant des valeurs avec plus de caractères que ne l'autorise l'élément <StringValueLength>.

Par exemple, cette erreur est générée si l'élément <StringValueLength> est défini sur 50 dans la règle, mais que la charge utile d'entrée contient un ou plusieurs éléments dont les valeurs contiennent plus de 50 caractères.

Diagnostic

  1. Examinez le message d'erreur pour identifier le nom de la règle et le numéro de ligne où la longueur de la chaîne est dépassée. Dans l'exemple suivant, le nom de la règle est JSON-Threat-Protection-1 and et la ligne dans la charge utile est 3.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length at line 3
    
  2. Notez la valeur spécifiée pour l'élément <StringValueLength> (identifié à l'étape 1).

    Dans l'exemple de règle JSONThreatProtection suivant, <StringValueLength> est défini sur 50 :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Examinez le numéro de ligne spécifique (identifié à l'étape 1) de la charge utile d'entrée et vérifiez si la longueur de la valeur est supérieure au nombre de caractères spécifié pour l'élément <StringValueLength> (identifié à l'étape 2). Si la longueur de la valeur dépasse la limite, il s'agit de la cause de l'erreur.

    Voici un exemple de charge utile d'entrée :

    {
      "Country": "New Zealand",
      "Place Name": "Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu"
    }
    

    La charge utile JSON présentée ci-dessus possède un objet nommé Place Name dont la valeur Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu contient 85 caractères à la ligne 3. Comme la longueur de la valeur est supérieure à 50, valeur spécifiée dans l'élément <StringValueLength>, vous obtenez l'erreur suivante :

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length
    at line 3
    

Solution

Si la règle JSONThreatProtection a été conçue pour protéger contre les charges utiles avec des valeurs dépassant une longueur de chaîne spécifique, le message d'erreur est attendu. Dans ce cas, aucune autre action n'est requise.

Toutefois, si vous constatez qu'une valeur plus longue peut être spécifiée dans la charge utile, modifiez la valeur de <StringValueLength> avec une valeur appropriée en fonction de vos besoins.

Par exemple, si vous pensez pouvoir autoriser une valeur pouvant atteindre 90, modifiez la règle comme suit :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>90</StringValueLength>
</JSONThreatProtection>

Objet JSON non valide

Corps de la réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: string: at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Exemple de corps de réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: Expecting : at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Cause

Cette erreur se produit si la charge utile du message d'entrée spécifiée par l'élément <Source> dans la règle JSONThreatProtection n'est pas un objet JSON valide.

Diagnostic

  1. Examinez le message d'erreur pour identifier le nom de la règle et le numéro de la ligne où l'erreur s'est produite. Dans l'exemple suivant, le nom de la règle est JSON-Threat-Protection-1 and et la ligne dans la charge utile est 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. Examinez le numéro de ligne spécifique (identifié à l'étape 1) de la charge utile d'entrée et vérifiez si l'objet JSON transmis dans la charge utile est bien un objet JSON valide.

    Voici un exemple de charge utile d'entrée :

    {
      "Longitude": 6.11499,
      "Latitude"  50.76891
    }
    

    Dans la charge utile JSON présentée ci-dessus, la ligne 3 ne contient pas ":" (deux-points). Comme il ne s'agit pas d'un objet JSON valide, vous obtenez l'erreur suivante :

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    Expecting : at line 3
    

Solution

Vérifiez la validité des charges utiles JSON d'entrée transmises aux proxys d'API incluant la règle JSONThreatProtection.

Pour l'exemple décrit ci-dessus, modifiez la charge utile JSON comme suit :

{
    "Longitude": 6.11499,
  "Latitude" : 50.76891
}

SourceUnavailable

Code d'erreur

steps.jsonthreatprotection.SourceUnavailable

Corps de la réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]::
          Source[var_name] is not available"
        "detail": {
            "errorcode": "steps.jsonthreatprotection.SourceUnavailable"
        }
    }
}

Exemple de corps de réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]::
          Source requests is not available",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.SourceUnavailable"
        }
    }
}

Cause

Cette erreur se produit si la variable message spécifiée dans l'élément <Source> de la règle JSONThreatProtection :

  • 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

Par exemple, cette erreur se produit si l'élément <Source> de la règle est défini sur une variable qui n'existe pas dans le flux où la règle est exécutée.

Diagnostic

  1. Identifiez le nom de la règle et le nom de la variable source dans le message d'erreur. Par exemple, dans le message d'erreur suivant, le nom de la règle est JSON-Threat-Protection-1 et la variable source est requests.

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. Examinez la valeur spécifiée pour l'élément <Source> identifié à l'étape 1.

    Dans l'exemple de règle JSONThreatProtection suivant, l'élément <Source> est défini sur requests.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>requests</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    

    Les valeurs valides pour l'élément <Source> sont request, response ou message. Comme "requêtes" n'est pas une valeur valide et n'existe pas dans le flux où la règle est exécutée, vous obtenez l'erreur :

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    

Solution

Assurez-vous que la variable définie dans l'élément <Source> de la règle JSONThreatProtection ayant échoué est définie sur request, response ou message, et qu'elle existe dans le flux où la règle s'exécute.

Pour corriger l'exemple de stratégie JSONThreatProtection présenté ci-dessus, vous pouvez modifier l'élément <Source> afin d'utiliser la variable request, car il existe dans le flux de requête :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

NonMessageVariable

Code d'erreur

steps.jsonthreatprotection.NonMessageVariable

Corps de la réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Variable var_name does not resolve to a Message"
        "detail": {
            "errorcode": "steps.jsonthreatprotection.NonMessageVariable"
        }
    }
}

Exemple de corps de réponse d'erreur

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Variable message.content does not resolve to a Message",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.NonMessageVariable"
        }
    }
}

Cause

Cette erreur se produit si l'élément <Source> de la règle JSONThreatProtection est défini sur une variable qui n'est pas de type message.

Les variables de type Message représentent des requêtes et des réponses HTTP entières. Les variables de flux Apigee Edge intégrées "requête", "réponse" et "message" sont de type message. Pour en savoir plus sur les variables de message, consultez la documentation de référence sur les variables.

Diagnostic

  1. Identifiez le nom de la règle JSONThreatProtection et le nom de la variable source dans le message d'erreur. Par exemple, dans le message d'erreur suivant, le nom de la règle est JSON-Threat-Protection-1 et la variable source est message.content.

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. Examinez l'élément <Source> de la stratégie JSONThreatProtection (identifiée à l'étape 1).

    Dans l'exemple de stratégie JSONThreatProtection suivant, <Source> est défini sur message.content au lieu de message :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>message.content</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    

    Comme message.content n'est pas du type message, vous obtenez l'erreur suivante :

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does
    not resolve to a Message
    

Solution

Vérifiez que l'élément <Source> de la règle JSONThreatProtection ayant échoué est défini sur une variable de flux de type Message qui existe dans le flux où la règle s'exécute.

Pour corriger la règle, vous pouvez modifier l'élément <Source> afin de spécifier une variable de type message. Par exemple, dans la règle JSONThreatProtection ayant échoué, vous pouvez spécifier l'élément <Source> en tant que message :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>message</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>