הדף הזה רלוונטי ל-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 |
השם הפנימי של המדיניות. הערך של מאפיין אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
מגדירים את הערך הגדרה ל- |
FALSE | אופציונלי |
enabled |
מגדירים את המדיניות למצב מגדירים את הערך |
TRUE | אופציונלי |
async |
המאפיין הזה הוצא משימוש. |
FALSE | הוצא משימוש |
אלמנט <DisplayName>
משתמשים בו בנוסף למאפיין name כדי לתת למדיניות שם אחר בשפה טבעית, לסימון המדיניות בכלי לעריכת פרוקסי בממשק המשתמש לניהול.
<DisplayName>Policy Display Name</DisplayName>
| ברירת מחדל |
לא רלוונטי אם לא מציינים את הרכיב הזה, המערכת משתמשת בערך של המאפיין |
|---|---|
| נוכחות | אופציונלי |
| סוג | 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 לא תקין.
|
build |
steps.jsonthreatprotection.SourceUnavailable |
500 |
השגיאה הזו מתרחשת אם המשתנה message
שצוין ברכיב <Source> הוא אחד מהבאים:
|
build |
steps.jsonthreatprotection.NonMessageVariable |
500 |
השגיאה הזו מתרחשת אם רכיב <Source> מוגדר למשתנה שהוא לא מסוג message.
|
build |
שגיאות בהטמעה
אין.
משתני תקלות
המשתנים האלה מוגדרים כשהמדיניות הזו מפעילה שגיאה. מידע נוסף על שגיאות שקשורות למדיניות
| משתנים | כאשר: | דוגמה |
|---|---|---|
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 כדי להפיל שירות ולגרום למתקפות מניעת שירות ברמת האפליקציה. כל ההגדרות הן אופציונליות, וצריך להתאים אותן כדי לבצע אופטימיזציה של דרישות השירות בהתאם לפגיעויות פוטנציאליות.
נושאים קשורים
מדיניות RegularExpressionProtection