מדיניות JSONThreatProtection

מדיניות ניתנת להרחבה

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

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

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

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

המדיניות הזו היא מדיניות שניתנת להרחבה, והשימוש בה עשוי להשפיע על העלויות או על הניצול, בהתאם לרישיון שלכם ל-Apigee. למידע על סוגי מדיניות והשלכות השימוש, אפשר לעיין במאמר בנושא סוגי מדיניות.

הפניה לרכיב

הפניה לרכיב מתארת את הרכיבים והמאפיינים של מדיניות JSONThreatProtection.

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

מאפיינים של <JSONThreatProtection>

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

בטבלה הבאה מתוארים מאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:

מאפיין תיאור ברירת מחדל נוכחות
name

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

אפשר להשתמש ברכיב <DisplayName> כדי לתת למדיניות תווית בשם אחר בשפה טבעית בכלי לעריכת פרוקסי בממשק הניהול.

לא רלוונטי חובה
continueOnError

מגדירים את הערך false כדי להחזיר שגיאה אם המדיניות נכשלת. זו התנהגות צפויה ברוב המדיניות.

הגדרה ל-true מאפשרת להמשיך את הביצוע של התהליך גם אחרי שמדיניות נכשלת. מידע נוסף:

FALSE אופציונלי
enabled

מגדירים את המדיניות למצב true כדי לאכוף אותה.

מגדירים את הערך false כדי להשבית את המדיניות. המדיניות לא תיאכף גם אם היא תישאר מצורפת לזרימה.

TRUE אופציונלי
async

המאפיין הזה הוצא משימוש.

FALSE הוצא משימוש

אלמנט <DisplayName>

משתמשים בו בנוסף למאפיין name כדי לתת למדיניות שם אחר בשפה טבעית, לסימון המדיניות בכלי לעריכת פרוקסי בממשק המשתמש לניהול.

<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל

לא רלוונטי

אם לא מציינים את הרכיב הזה, המערכת משתמשת בערך של המאפיין name של המדיניות.

נוכחות אופציונלי
סוג String

אלמנט <ArrayElementCount>

מציינת את המספר המקסימלי של רכיבים שמותרים במערך.

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

רכיב <ContainerDepth>

מציין את עומק ההכלה המקסימלי המותר, כאשר הקונטיינרים הם אובייקטים או מערכים. לדוגמה, מערך שמכיל אובייקט שמכיל אובייקט יניב עומק הכלה של 3.

<ContainerDepth>10</ContainerDepth>
ברירת מחדל: אם לא מציינים את הרכיב הזה, או אם מציינים מספר שלם שלילי, המערכת לא אוכפת מגבלה כלשהי.
נוכחות: אופציונלי
סוג: מספר שלם

אלמנט <ObjectEntryCount>

מציין את המספר המקסימלי של רשומות שמותרות באובייקט.

<ObjectEntryCount>15</ObjectEntryCount>
ברירת מחדל: אם לא מציינים את הרכיב הזה, או אם מציינים מספר שלם שלילי, המערכת לא אוכפת מגבלה כלשהי.
נוכחות: אופציונלי
סוג: מספר שלם

אלמנט <ObjectEntryNameLength>

מציין את אורך המחרוזת המקסימלי שמותר לשם מאפיין בתוך אובייקט.

<ObjectEntryNameLength>50</ObjectEntryNameLength>
ברירת מחדל: אם לא מציינים את הרכיב הזה, או אם מציינים מספר שלם שלילי, המערכת לא אוכפת מגבלה.
נוכחות: אופציונלי
סוג: מספר שלם

רכיב <Source>

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

<Source>request</Source>
ברירת מחדל: בקשה
נוכחות: אופציונלי
סוג:

מחרוזת.

הערכים האפשריים: request, response או message.

אלמנט <StringValueLength>

מציין את האורך המקסימלי המותר של ערך מחרוזת.

<StringValueLength>500</StringValueLength>
ברירת מחדל: אם לא מציינים את הרכיב הזה, או אם מציינים מספר שלם שלילי, המערכת לא אוכפת מגבלה.
נוכחות: אופציונלי
סוג: מספר שלם

הפניה לשגיאה

בקטע הזה מתוארים קודי התקלות והודעות השגיאה שמוחזרים, ומשתני התקלות שמוגדרים על ידי Apigee כשמדיניות כזו מפעילה שגיאה. חשוב לדעת את המידע הזה אם אתם מפתחים כללי תקלות כדי לטפל בתקלות. מידע נוסף על שגיאות שקשורות למדיניות ועל טיפול בשגיאות

שגיאות זמן ריצה

השגיאות האלה יכולות להתרחש כשהמדיניות מופעלת.

קוד תקלה סטטוס HTTP מטרה תיקון
steps.jsonthreatprotection.ExecutionFailed 500 מדיניות JSONThreatProtection יכולה להחזיר סוגים שונים של שגיאות ExecutionFailed. רוב השגיאות האלה מתרחשות כשחורגים מסף מסוים שהוגדר במדיניות. סוגי השגיאות האלה כוללים: אורך שם של רשומה באובייקט, מספר הרשומות באובייקט, מספר הרכיבים במערך, עומק המאגר, אורך ערך המחרוזת. השגיאה הזו מתרחשת גם כשהמטען הייעודי (payload) מכיל אובייקט JSON לא תקין.
steps.jsonthreatprotection.SourceUnavailable 500 השגיאה הזו מתרחשת אם המשתנה message שצוין ברכיב <Source> הוא אחד מהבאים:
  • לא רלוונטי (לא זמין בתהליך הספציפי שבו המדיניות מופעלת)
  • הערך לא תואם לאחד מהערכים התקינים request,‏ response או message
steps.jsonthreatprotection.NonMessageVariable 500 השגיאה הזו מתרחשת אם רכיב <Source> מוגדר למשתנה שהוא לא מסוג message.

שגיאות בהטמעה

אין.

משתני תקלות

המשתנים האלה מוגדרים כשהמדיניות הזו מפעילה שגיאה. מידע נוסף על שגיאות שקשורות למדיניות

משתנים כאשר: דוגמה
fault.name="fault_name" fault_name הוא שם התקלה, כפי שמופיע בטבלה Runtime errors שלמעלה. שם התקלה הוא החלק האחרון של קוד התקלה. fault.name Matches "SourceUnavailable"
jsonattack.policy_name.failed policy_name הוא השם שהמשתמש הגדיר למדיניות שגרמה לשגיאה. jsonattack.JTP-SecureRequest.failed = true

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

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

דוגמה לכלל שגיאה

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

סכימות

הערות שימוש

בדומה לשירותים מבוססי-XML, ממשקי API שתומכים ב-JSON (‏JavaScript Object Notation) חשופים למתקפות ברמת התוכן. במתקפות JSON פשוטות מנסים להשתמש במבנים שמעמיסים על מנתחי JSON כדי להפיל שירות ולגרום למתקפות מניעת שירות ברמת האפליקציה. כל ההגדרות הן אופציונליות, וצריך להתאים אותן כדי לבצע אופטימיזציה של דרישות השירות בהתאם לפגיעויות פוטנציאליות.

נושאים קשורים

מדיניות JSONtoXML

מדיניות XMLThreatProtection

מדיניות RegularExpressionProtection