פתרון בעיות של שגיאות זמן ריצה בהגנה מפני איומים ב-JSON

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

ExecutionFailed

קוד שגיאה

steps.jsonthreatprotection.ExecutionFailed

גוף התגובה לשגיאה

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

סוגי שגיאות וסיבות אפשריות

מדיניות JSONThreatProtection יכולה להחזיר סוגים רבים ושונים של שגיאות ExecutionFailed. בטבלה הבאה מפורטים סוגי השגיאות השונים והסיבות האפשריות להן:

סוג השגיאה מטרה
חריגה מאורך שם רשומת האובייקט האורך המקסימלי של מחרוזת שמותרת בשם של רשומה באובייקט חורג מהמותר.
חרגת ממספר רשומות האובייקטים חלה חריגה מהמספר המקסימלי של הערכים שמותרים באובייקט.
חריגה ממספר הרכיבים במערך חלה חריגה מהמספר המקסימלי של רכיבים שמותרים במערך.
הגעתם למגבלת העומק של הקונטיינר חריגה מהעומק המקסימלי המותר של הקינון.
חריגה מאורך ערך המחרוזת האורך המקסימלי המותר של ערך מחרוזת חורג.
אובייקט JSON לא תקין מטען ה-JSON הייעודי שהוזן לא תקין.

השם של רשומת האובייקט ארוך מדי

גוף התגובה לשגיאה

{
    "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"
        }
    }
}

דוגמה לתוכן של תגובת שגיאה

{
    "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"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם המטען הייעודי (payload) של הודעת הקלט שצוין ברכיב <Source> מכיל אובייקט JSON עם שם מאפיין שחורג מהאורך המקסימלי שצוין ברכיב <ObjectEntryNameLength>.

לדוגמה, אם הרכיב <ObjectEntryNameLength> מוגדר כמדיניות עם ערך של 5, אבל למטען הייעודי (payload) של הודעת הקלט יש מאפיין JSON שהשם שלו ארוך מ-5 תווים, השגיאה הזו תופעל.

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות JSONThreatProtection ואת מספר השורה שבה מופיע שם הרשומה הארוך. לדוגמה, בהודעת השגיאה הבאה, שם מדיניות ה-JSONThreatProtection הוא JSON-Threat-Protection-1 ומספר השורה במטען הייעודי (payload) הוא 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. בודקים את המדיניות שזיהיתם בשלב 1 ורושמים את הערך שצוין ברכיב <ObjectEntryNameLength>.

    לדוגמה, במדיניות הבאה של JSONThreatProtection, הערך של <ObjectEntryNameLength> מוגדר ל-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. בודקים את מספר השורה הספציפי (שזוהה בשלב 1) של מטען הייעודי (payload) של הקלט, ומבררים אם האורך של שם האובייקט גדול מהערך שצוין ברכיב <ObjectEntryNameLength> (שזוהה בשלב 2). אם האורך של שם האובייקט גדול מהמספר הזה, זו הסיבה לשגיאה.

    דוגמה למטען ייעודי (payload) של קלט:

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

    מטען ה-JSON שמוצג למעלה כולל מאפיין בשם number בשורה 2, שמכיל 6 תווים (אורך השם הוא 6). מכיוון שאורך שם האובייקט גדול מ-5 (הערך שצוין לרכיב <ObjectEntryNameLength>), מוצגת השגיאה הבאה:

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

רזולוציה

אם מדיניות JSONThreatProtection נועדה להגן מפני מטען ייעודי (payload) עם שמות של רשומות אובייקט שחורגים מהערך המוגדר, הודעת השגיאה צפויה. במקרה כזה, לא נדרשת פעולה נוספת.

עם זאת, אם תגיעו למסקנה שאפשר לציין שמות ארוכים יותר של רשומות אובייקט במטען הייעודי (payload) בלי השלכות, תוכלו לשנות את הערך של <ObjectEntryNameLength> לערך מתאים על סמך הדרישות שלכם.

לדוגמה, אם אתם חושבים שאפשר לאפשר שמות של אובייקטים באורך של עד 10 תווים, אתם יכולים לשנות את מדיניות JSONThreatProtection באופן הבא:

<?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>

חריגה ממספר רשומות האובייקטים

גוף התגובה לשגיאה

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

דוגמה לתוכן של תגובת שגיאה

{
    "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"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם המטען הייעודי של הודעת הקלט שצוין ברכיב <Source> מכיל אובייקט JSON שמכיל יותר רשומות (מאפיינים) מהערך שצוין ברכיב <ObjectEntryCount> של המדיניות.

לדוגמה, אם הערך של הרכיב <ObjectEntryCount> הוא 5, אבל במטען הייעודי (payload) של קלט ה-JSON יש יותר מ-5 רשומות, השגיאה הזו תוצג.

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות של JSONThreatProtection ואת מספר השורה שבה חרגתם ממגבלת הרשומות. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 ומספר השורה במטען הייעודי הוא 7:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. רושמים בצד את הערך שצוין ברכיב <ObjectEntryCount> של המדיניות (שזוהה בשלב 1).

    בדוגמה הבאה של מדיניות, הערך <ObjectEntryCount> מוגדר ל-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. בודקים את מספר השורה הספציפי (שזוהה בשלב 1) של מטען הייעודי (payload) של הקלט, ומוודאים שמספר הישויות במטען הייעודי גדול מהערך שצוין ברכיב <ObjectEntryCount> (שזוהה בשלב 2). אם מספר האובייקטים חורג ממספר רשומות האובייקטים, זו הסיבה לשגיאה.

    דוגמה למטען ייעודי (payload) של קלט:

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

    במטען הייעודי (payload) של JSON שמוצג למעלה, הרשומה השישית מופיעה בשורה 7 (company). מכיוון שמספר רשומות האובייקט במטען הייעודי (payload) של JSON גדול מ-5 (הערך שצוין עבור רכיב <ObjectEntryCount>), מוצגת השגיאה הבאה:

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

רזולוציה

אם מדיניות JSONThreatProtection נועדה להגן מפני מטען ייעודי (payload) עם מספר רשומות אובייקט שחורג מסף מסוים, הודעת השגיאה צפויה. במקרה כזה, לא צריך לבצע פעולה נוספת.

עם זאת, אם תגיעו למסקנה שאפשר לכלול עוד רשומות של אובייקטים במטען הייעודי בלי שום השלכות, תוכלו לשנות את הערך של <ObjectEntryCount> לערך מתאים על סמך הדרישות שלכם.

לדוגמה, אם אתם חושבים שאפשר לאפשר עד 10 רשומות של אובייקטים, אתם יכולים לשנות את מדיניות JSONThreatProtection באופן הבא:

<?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>

חריגה ממספר רכיבי המערך

גוף התגובה לשגיאה

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

דוגמה לתוכן של תגובת שגיאה

{
    "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"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם המטען הייעודי של הודעת הקלט שצוין ברכיב <Source> מכיל מערך JSON עם מספר רכיבים שגדול ממספר הרכיבים שצוין ברכיב <ArrayElementCount> של המדיניות.

לדוגמה, אם הרכיב <ArrayElementCount> מוגדר כ-3, אבל למטען הייעודי (payload) של הקלט יש מערך JSON עם יותר מ-3 רכיבים, השגיאה הזו תופעל.

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות ואת מספר השורה שבה חרגתם מאורך המערך. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 ומספר השורה במטען הייעודי (payload) הוא 3:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. רושמים בצד את הערך שצוין לרכיב <ArrayElementCount> של המדיניות (שזוהה בשלב 1).

    בדוגמה הבאה של מדיניות JSONThreatProtection, הערך של <ArrayElementCount> מוגדר ל-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. בודקים את מספר השורה הספציפי (שמצוין בשלב 1) של מטען הייעודי (payload) של הקלט, ומוודאים שהמערך שצוין שם מכיל מספר גבוה יותר מהמספר שצוין ברכיב <ArrayElementCount> (שמצוין בשלב 2). אם מספר רכיבי המערך גדול מהספירה, זו הסיבה לשגיאה.

    דוגמה למטען ייעודי (payload) של קלט:

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

    מטען ה-JSON שמוצג למעלה מכיל 5 רכיבים במערך בשם models בשורה 3. מכיוון שמספר הרכיבים במערך גדול מ-3 (הערך שצוין עבור הרכיב <ArrayElementCount>), מוצגת השגיאה הבאה:

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

רזולוציה

אם מדיניות JSONThreatProtection נועדה להגן מפני מטען ייעודי (payload) עם סף ספציפי של מספר מערכים, הודעת השגיאה צפויה. במקרה כזה, לא נדרשת פעולה נוספת.

עם זאת, אם לדעתכם אפשר לאפשר מספר גבוה יותר של רכיבים במערך, אתם יכולים לשנות את הערך של <ArrayElementCount> לערך מתאים בהתאם לדרישות שלכם.

לדוגמה, אם אתם חושבים שאפשר לאפשר עד 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>5</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

חריגה מעומק מאגר התגים

גוף התגובה לשגיאה

תנועה בזמן ריצה מחזירה קוד תגובה 500 עם השגיאה הבאה:

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

דוגמה לתוכן של תגובת שגיאה

{
    "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"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם מטען הייעודי (payload) של הודעת הקלט שצוין ברכיב <Source> מכיל אובייקט JSON שמכיל רכיבי JSON עם עומק של כלי מכיל שחורג מהעומק המרבי של כלי מכיל שצוין ברכיב <ContainerDepth> של המדיניות. עומק של כלי מכיל הוא העומק המקסימלי המותר של רכיבי JSON. לדוגמה, מערך שמכיל אובייקט שמכיל אובייקט יגרום לעומק של כלי מכיל של 3.

לדוגמה, אם רכיב <ContainerDepth> הוא 3, אבל למטען הייעודי (payload) של הקלט יש עומק של מאגר שחורג מהמגבלה הזו, השגיאה הזו תופעל.

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות JSONThreatProtection ואת מספר השורה שבה חריגה מעומק המאגר. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 ומספר השורה במטען הייעודי הוא 5.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. רושמים בצד את הערך שצוין לרכיב <ContainerDepth> (שזוהה בשלב 1).

    בדוגמה הבאה של מדיניות JSONThreatProtection, הערך של <ContainerDepth> מוגדר ל-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. בודקים את מספר השורה הספציפי (שצוין בשלב 1) של מטען הנתונים של הקלט, ומבררים אם עומק המאגר במטען הנתונים גבוה מהערך שצוין ברכיב <ContainerDepth> (שצוין בשלב 2). אם עומק מאגר התגים חורג מהמספר, זו הסיבה לשגיאה.

    דוגמה למטען ייעודי (payload) של קלט:

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

    מטען ה-JSON הייעודי שמוצג למעלה מכיל עומק של 6 בשורה 5. מכיוון שהערך של depth גדול מ-5, תקבלו את השגיאה הבאה לגבי רכיב <ContainerDepth> של מדיניות JSONThreatProtection:

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

רזולוציה

אם מדיניות JSONThreatProtection נועדה להגן מפני מטען ייעודי (payload) עם עומקי קונטיינר שחורגים מהערך שצוין, הודעת השגיאה צפויה. במקרה כזה, לא נדרשת פעולה נוספת.

עם זאת, אם אתם קובעים שעומק גבוה יותר של מאגרים מקובל, אתם יכולים לשנות את הערך של <ContainerDepth> לערך מתאים בהתאם לדרישות שלכם.

לדוגמה, אם אתם חושבים שאפשר לאפשר עומקים של מאגרי תגים עד 10, אתם יכולים לשנות את המדיניות באופן הבא:

<?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>

חריגה מאורך ערך המחרוזת

גוף התגובה לשגיאה

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

דוגמה לתוכן של תגובת שגיאה

{
    "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"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם מטען הייעודי (payload) של הודעת הקלט שצוין על ידי הרכיב <Source> מכיל רכיבי JSON עם ערכים שיש בהם יותר תווים מהמותר לפי הרכיב <StringValueLength>.

לדוגמה, אם הרכיב <StringValueLength> מוגדר ל-50 במדיניות, אבל מטען הייעוד של הקלט כולל רכיב אחד או יותר שהערכים שלהם מכילים יותר מ-50 תווים, השגיאה הזו תופעל.

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות ואת מספר השורה שבה חרגתם מאורך המחרוזת. בדוגמה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 andline in the payload 3.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length at line 3
    
  2. רושמים בצד את הערך שצוין לרכיב <StringValueLength> (שזוהה בשלב 1).

    בדוגמה הבאה של מדיניות JSONThreatProtection, הערך של <StringValueLength> מוגדר ל-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. בודקים את מספר השורה הספציפי (שצוין בשלב 1) של מטען הייעודי (payload) של הקלט, ומבררים אם אורך הערך גדול ממספר התווים שצוין עבור האלמנט <StringValueLength> (שצוין בשלב 2). אם אורך הערך חורג מהמגבלה, זו הסיבה לשגיאה.

    דוגמה למטען ייעודי (payload) של קלט:

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

    מטען ה-JSON שמוצג למעלה כולל אובייקט בשם Place Name שהערך שלו Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu הוא באורך 85 תווים בשורה 3. מכיוון שאורך הערך גדול מ-50, הערך שצוין באלמנט <StringValueLength>, מוצגת השגיאה הבאה:

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

רזולוציה

אם מדיניות JSONThreatProtection נועדה להגן מפני מטען ייעודי (payload) עם ערכים שעולים על אורך מחרוזת מסוים, הודעת השגיאה צפויה. במקרה כזה, לא נדרשת פעולה נוספת.

עם זאת, אם קובעים שאפשר לציין אורך ערך ארוך יותר במטען הייעודי (payload), צריך לשנות את <StringValueLength> לערך מתאים על סמך הדרישות שלכם.

לדוגמה, אם אתם חושבים שאפשר לאפשר ערך באורך של עד 90, אתם יכולים לשנות את המדיניות באופן הבא:

<?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>

אובייקט JSON לא תקין

גוף התגובה לשגיאה

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

דוגמה לתוכן של תגובת שגיאה

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

מטרה

השגיאה הזו מתרחשת אם מטען הייעודי (payload) של הודעת הקלט שצוין ברכיב <Source> במדיניות JSONThreatProtection הוא לא אובייקט JSON תקין.

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות ואת מספר השורה שבה השגיאה התרחשה. בדוגמה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 andline in the payload 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. בודקים את מספר השורה הספציפי (שזוהה בשלב 1) של מטען הייעודי (payload) של הקלט, ומוודאים שאובייקט ה-JSON שהועבר במטען הייעודי הוא אכן אובייקט JSON תקין.

    דוגמה למטען ייעודי (payload) של קלט:

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

    במטען הייעודי (payload) של JSON שמוצג למעלה, בשורה 3 אין ":" (נקודתיים). מכיוון שזה לא אובייקט JSON תקין, מוצגת השגיאה:

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

רזולוציה

צריך לוודא שמטען ייעודי (payload) תקין בפורמט JSON מועבר לכל API Proxy שכולל את המדיניות JSONThreatProtection.

בדוגמה שמתוארת למעלה, משנים את מטען ה-JSON הייעודי (payload) באופן הבא:

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

SourceUnavailable

קוד שגיאה

steps.jsonthreatprotection.SourceUnavailable

גוף התגובה לשגיאה

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

דוגמה לתוכן של תגובת שגיאה

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

מטרה

השגיאה הזו מתרחשת אם המשתנה message שצוין ברכיב <Source> של מדיניות JSONThreatProtection הוא אחד מהבאים:

  • לא רלוונטי (לא זמין בתהליך הספציפי שבו המדיניות מופעלת)
  • הערך לא תואם לאחד מהערכים התקינים request,‏ response או message

לדוגמה, השגיאה הזו מתרחשת אם הרכיב <Source> במדיניות מוגדר למשתנה שלא קיים בתהליך שבו המדיניות מופעלת.

אבחון

  1. מזהים את שם המדיניות ואת השם של משתנה המקור מהודעת השגיאה. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 ומשתנה המקור הוא requests:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. בודקים את הערך שצוין לרכיב <Source> שזוהה בשלב 1.

    בדוגמה הבאה של מדיניות JSONThreatProtection, הרכיב <Source> מוגדר ל-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>
    

    הערכים התקינים של רכיב <Source> הם request,‏ response או message. הערך requests לא תקין ולא קיים בתהליך שבו המדיניות מופעלת, ולכן מתקבלת השגיאה:

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

רזולוציה

מוודאים שהמשתנה שמוגדר ברכיב <Source> של מדיניות JSONThreatProtection שנכשלה מוגדר לערך request, response או message, ושהוא קיים בתהליך שבו המדיניות מופעלת.

כדי לתקן את מדיניות JSONThreatProtection שמוצגת בדוגמה שלמעלה, אפשר לשנות את הרכיב <Source> כך שישתמש במשתנה request, כי הוא קיים בתהליך הבקשה:

<?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

קוד שגיאה

steps.jsonthreatprotection.NonMessageVariable

גוף התגובה לשגיאה

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

דוגמה לתוכן של תגובת שגיאה

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

מטרה

השגיאה הזו מתרחשת אם הרכיב <Source> במדיניות JSONThreatProtection מוגדר למשתנה שלא מסוג message.

משתני סוג ההודעה מייצגים בקשות ותגובות מלאות של HTTP. המשתנים המובנים של Apigee flow request,‏ response ו-message הם מסוג message. מידע נוסף על משתני הודעות זמין במאמר בנושא משתנים.

אבחון

  1. מזהים את שם המדיניות JSONThreatProtection ואת השם של משתנה המקור מהודעת השגיאה. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 ומשתנה המקור הוא message.content:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. בודקים את הרכיב <Source> של מדיניות JSONThreatProtection (שזוהתה בשלב 1).

    בדוגמה הבאה של מדיניות JSONThreatProtection, הערך של <Source> מוגדר ל-message.content במקום ל-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>
    

    מכיוון ש-message.content הוא לא מסוג הודעה, מוצגת השגיאה:

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

רזולוציה

מוודאים שהרכיב <Source> במדיניות JSONThreatProtection שנכשלה מוגדר למשתנה זרימה מסוג message שקיים בזרימה שבה המדיניות מופעלת.

כדי לתקן את המדיניות, אפשר לשנות את האלמנט <Source> כדי לציין משתנה מסוג הודעה. לדוגמה, ב-JSONThreatProtection שנכשל, אפשר לציין את הרכיב <Source> כ-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>