אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
מה
מצמצם את הסיכון להתקפות ברמת התוכן, כי הוא מאפשר לכם להגדיר מגבלות על מבני JSON שונים, כמו מערכים ומחרוזות.
סרטון: בסרטון הקצר הזה אפשר לקבל מידע נוסף על האופן שבו מדיניות JSONThreatProtection מאפשרת לכם לאבטח ממשקי API מפני מתקפות ברמת התוכן.
סרטון: כדאי לצפות בסרטון הקצר הזה על פלטפורמת ה-API של 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 |
השם הפנימי של המדיניות. הערך של המאפיין אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
צריך להגדיר את הערך יש להגדיר ל- |
false | אופציונלי |
enabled |
צריך להגדיר את הערך צריך להגדיר את הערך |
true | אופציונלי |
async |
המאפיין הזה הוצא משימוש. |
false | הוצא משימוש |
<DisplayName> רכיב
צריך להשתמש בנוסף למאפיין name כדי להוסיף תווית למדיניות
עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.
<DisplayName>Policy Display Name</DisplayName>
| ברירת מחדל |
לא רלוונטי אם משמיטים את הרכיב הזה, הערך של המאפיין |
|---|---|
| נוכחות | אופציונלי |
| סוג | מחרוזת |
אלמנט <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>
| ברירת מחדל: | אם לא מציינים את הרכיב הזה, או אם מציינים מספר שלם שלילי, המערכת לא אוכפת מגבלה. |
| נוכחות: | אופציונלי |
| סוג: | מספר שלם |
הפניה לשגיאה
בקטע הזה מתוארים קודי השגיאה והודעות השגיאה שהוחזרו, ומשתני התקלה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת את המידע הזה אם אתם מפתחים כללי כשל כדי לטפל בתקלות. מידע נוסף זמין במאמר מה צריך לדעת? מידע על שגיאות שקשורות למדיניות וטיפול פגמים.
שגיאות זמן ריצה
השגיאות האלה עשויות להתרחש כשהמדיניות מופעלת.
| קוד תקלה | סטטוס HTTP | סיבה | תיקון |
|---|---|---|---|
steps.jsonthreatprotection.ExecutionFailed |
500 | מדיניות JSONThreatProtection יכולה לגרום לסוגים שונים של שגיאות ביצוע שנכשלו. רוב השגיאות האלה מתרחשות כשחורגים מסף מסוים שנקבע במדיניות. האלה סוגי שגיאות כוללים: אורך שם רשומת האובייקט, מספר רשומות של אובייקטים, מספר רכיבי המערך, עומק קונטיינר, אורך ערך מחרוזת המחרוזת. השגיאה הזו מתרחשת גם כשהמטען הייעודי (Payload) מכיל אובייקט JSON לא תקין. | build |
steps.jsonthreatprotection.SourceUnavailable |
500 |
השגיאה הזו מתקבלת אם ההודעה
המשתנה שמצוין ברכיב <Source> הוא:
|
build |
steps.jsonthreatprotection.NonMessageVariable |
500 |
השגיאה הזו מתקבלת אם הרכיב <Source> מוגדר למשתנה
אינו מסוג
message.
|
build |
שגיאות פריסה
ללא.
משתני כשל
המשתנים האלה מוגדרים כשהמדיניות הזו גורמת לשגיאה. מידע נוסף זמין במאמר מה צריך לדעת? על שגיאות שקשורות למדיניות.
| משתנים | איפה | דוגמה |
|---|---|---|
fault.name="fault_name" |
fault_name הוא שם השגיאה, כפי שמצוין בטבלה שגיאות זמן ריצה שלמעלה. שם השגיאה הוא החלק האחרון בקוד השגיאה. | 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 כדי להפיל שירות ולגרום למתקפות מניעת שירות ברמת האפליקציה. כל ההגדרות הן אופציונליות, וצריך להתאים אותן כדי לבצע אופטימיזציה של דרישות השירות בהתאם לפגיעויות פוטנציאליות.