הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge
ממשקי API שמקבלים מטען ייעודי (payload) בפורמט JSON חשופים למתקפות זדוניות שנועדו להעמיס יתר על המנתח של JSON. המתקפות האלה עשויות לכלול נתוני payload עם רכיבי מערך מוגזמים, מבנים מוטמעים עמוקים או מחרוזות ארוכות במיוחד, שיכולים לגרום לקריסת השירות או לצרוך זיכרון מוגזם.
המדיניות 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 שתומכים בסימון אובייקטים ב-JavaScript (JSON) חשופים להתקפות ברמת התוכן. במתקפות JSON פשוטות מנסים להשתמש במבנים שמעמיסים על מנתחי JSON כדי להפיל שירות ולגרום למתקפות מניעת שירות ברמת האפליקציה. כל ההגדרות הן אופציונליות, וצריך להתאים אותן כדי לבצע אופטימיזציה של דרישות השירות בהתאם לפגיעויות פוטנציאליות.
נושאים קשורים
מדיניות RegularExpressionProtection