מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע

מה
טיפול בנקודות חולשה ב-XML וצמצום התקפות על ה-API. אופציונלי: זיהוי מטען ייעודי (payload) של XML מתקפות על בסיס מגבלות שהוגדרו. סינון איומי XML באמצעות הפקודה הבאה גישות:
- אימות הודעות מול סכימת XML (
.xsd
) - הערכת תוכן ההודעה לפי מילות מפתח או דפוסים ספציפיים שצריך להחריג
- לזהות הודעות פגומות או לא תקינות לפני ניתוח ההודעות האלה
הפניה לרכיב
בהפניה לרכיב מתוארים הרכיבים והמאפיינים של XMLThreatProtection המדיניות בנושא
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1"> <DisplayName>XML Threat Protection 1</DisplayName> <NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits> <Source>request</Source> <StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits> <ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits> </XMLThreatProtection>
<XMLThreatProtection> מאפיינים
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1">
בטבלה הבאה מתוארים מאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:
מאפיין | תיאור | ברירת מחדל | נוכחות |
---|---|---|---|
name |
השם הפנימי של המדיניות. הערך של המאפיין אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
צריך להגדיר את הערך יש להגדיר ל- |
false | אופציונלי |
enabled |
צריך להגדיר את הערך צריך להגדיר את הערך |
true | אופציונלי |
async |
המאפיין הזה הוצא משימוש. |
false | הוצא משימוש |
<DisplayName> רכיב
צריך להשתמש בנוסף למאפיין name
כדי להוסיף תווית למדיניות
עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.
<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל |
לא רלוונטי אם משמיטים את הרכיב הזה, הערך של המאפיין |
---|---|
נוכחות | אופציונלי |
סוג | מחרוזת |
<NameLimits> רכיב
מציינת את מגבלות התווים שצריך לבדוק ולאכוף באמצעות המדיניות.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
ברירת המחדל: | לא רלוונטי |
נוכחות: | אופציונלי |
סוג: | לא רלוונטי |
<NameLimits>/<Element> רכיב
מציינת את המגבלה על מספר התווים המקסימלי שמותר לכל שם רכיב ב-XML מהמסמך.
למשל, שימו לב ל-XML הבא:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
בניתוח ה-XML שלמעלה, ערך הרכיב <Element>
במדיניות
קטע הקוד שבהמשך יאמת את שמות הרכיבים (book
, title
,
author
ו-year)
לא חורגים מ-10
תווים.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: | מספר שלם |
<NameLimits>/<Attribute> רכיב
מציינת מגבלה על מספר התווים המקסימלי שמותר לכל שם מאפיין מסמך XML.
למשל, שימו לב ל-XML הבא:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
בניתוח ה-XML שלמעלה, ערך הרכיב <Attribute>
במדיניות
קטע הקוד שבהמשך יאמת ששם המאפיין category
לא עולה על
10
תווים.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: | מספר שלם |
<NameLimits>/<NamespacePrefix> רכיב
מציינת מגבלה על מספר התווים המקסימלי שמותר בקידומת של מרחב השמות מסמך XML.
למשל, שימו לב ל-XML הבא:
<ns1:myelem xmlns:ns1="http://ns1.com"/>
בניתוח ה-XML שלמעלה, ערך הרכיב <NamespacePrefix>
בקובץ ה-XML
קטע הקוד של המדיניות הבא יאשר שהקידומת של מרחב השמות ns1
לא חורגת מהמגבלה
10
תווים.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: | מספר שלם |
<NameLimits>/<ProcessingInstructionTarget> רכיב
מציינת מגבלה על מספר התווים המקסימלי שמותר לכלול ביעד של כל רכיב הוראות לעיבוד במסמך ה-XML.
למשל, שימו לב ל-XML הבא:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
בניתוח ה-XML שלמעלה, הרכיב <ProcessingInstructionTarget>
בערך בקטע הקוד של המדיניות שלמטה, יתבצע אימות שהיעד של הוראה לעיבוד מידע
xml-stylesheet
לא חורגת מ-10
תווים.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: | מספר שלם |
<Source> רכיב
הודעה שצריך לבדוק אם יש התקפות מטען ייעודי (payload) של XML. בדרך כלל ההגדרה הזו היא
request
, מכיוון שבדרך כלל צריך לאמת בקשות נכנסות מאפליקציות של לקוח.
אם הערך שמוגדר הוא message
, הרכיב הזה יעריך באופן אוטומטי את הודעת הבקשה
כאשר הם מצורפים לתהליך הבקשה ולהודעת התשובה כשהיא מצורפת לתשובה
.
<Source>request</Source>
ברירת המחדל: | בקשה |
נוכחות: | אופציונלי |
סוג: |
מחרוזת. אפשר לבחור מבין האפשרויות |
<StructuralLimits> רכיב
מציינת את המגבלות המבניות לבדיקה ולאכיפה של המדיניות.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
ברירת המחדל: | לא רלוונטי |
נוכחות: | אופציונלי |
סוג: | לא רלוונטי |
<StructuralLimits>/<NodeDepth> רכיב
מציינת את עומק הצומת המקסימלי המותר ב-XML.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: |
מספר שלם |
<StructuralLimits>/<AttributeCountPerElement> רכיב
מציינת את מספר המאפיינים המקסימלי שמותר לכל רכיב.
למשל, שימו לב ל-XML הבא:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<AttributeCountPerElement>
בקטע הקוד של המדיניות שבהמשך, יתבצע אימות שהרכיבים book
, title
,
author
ו-year
לא כוללים יותר מ-2
מאפיינים לכל אחד.
חשוב לזכור שמאפיינים שמשמשים להגדרת מרחבי שמות לא נספרים.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: |
מספר שלם |
<StructuralLimits>/<NameSpaceCountPerElement> רכיב
מציינת את המספר המקסימלי של הגדרות מרחב שמות שמותרות לכל רכיב.
למשל, שימו לב ל-XML הבא:
<e1 attr1="val1" attr2="val2"> <e2 xmlns="http://apigee.com" xmlns:yahoo="http://yahoo.com" one="1" yahoo:two="2"/> </e1>
בניתוח ה-XML שלמעלה, ערך הרכיב <NamespaceCountPerElement>
בקטע הקוד של המדיניות שבהמשך יתבצע אימות שהרכיבים e1
ו-e2
לא יכולות לכלול יותר מ-2
הגדרות של מרחב שמות, כל אחת. במקרה הזה, ל-<e1> יש 0 הגדרות של מרחב שמות וגם
ל-<e2> יש 2 מרחב שמות
הגדרות: xmlns="http://apigee.com"
ו
xmlns:yahoo="http://yahoo.com"
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: |
מספר שלם |
<StructuralLimits>/<ChildCount> רכיב
מציינת את המספר המקסימלי של רכיבי צאצא שמותר לכל רכיב.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: |
מספר שלם |
מאפיינים
מאפיין | ברירת מחדל | נוכחות |
---|---|---|
includeComment | true | אופציונלי |
includeElement | true | אופציונלי |
includeProcessingInstructions | true | אופציונלי |
includeText | true | אופציונלי |
<ValueLimits> רכיב
מציינת מגבלות תווים כדי שהערכים שייבדקו וייאכפו על ידי המדיניות.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
ברירת המחדל: | לא רלוונטי |
נוכחות: | אופציונלי |
סוג: |
לא רלוונטי |
<ValueLimits>/<Text> רכיב
מציינת מגבלת תווים לכל צומתי טקסט שנמצאים במסמך ה-XML.
למשל, שימו לב ל-XML הבא:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Text>
במדיניות
קטע הקוד שבהמשך יבצע אימות שערכי הטקסט של הרכיב Learning XML
, Erik T.
Ray,
ו-2003
לא יחרגו מ-15
תווים כל אחד.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: |
מספר שלם |
<ValueLimits>/<Attribute> רכיב
מציינת מגבלת תווים לכל ערכי מאפיינים במסמך ה-XML.
למשל, שימו לב ל-XML הבא:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Attribute>
במדיניות
קטע הקוד שבהמשך יאמת שערך המאפיין WEB
לא עולה על
10
תווים.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: |
מספר שלם |
<ValueLimits>/<NamespaceURI> רכיב
מציינת מגבלת תווים לכל מזהה URI של מרחב שמות שנמצא במסמך ה-XML.
למשל, שימו לב ל-XML הבא:
<ns1:myelem xmlns:ns1="http://ns1.com"/>
<NamespaceURI>
בקובץ
קטע הקוד של המדיניות שבהמשך תאמת שערך ה-URI של מרחב השמות http://ns1.com
לא יחרגו מ-10
תווים.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: |
מספר שלם |
<ValueLimits>/<Comment> רכיב
מציינת מגבלת תווים של תגובות במסמך ה-XML.
למשל, שימו לב ל-XML הבא:
<book category="WEB"> <!-- This is a comment --> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Comment>
במדיניות
קטע הקוד שבהמשך יאשר שטקסט התגובה This is a comment
לא עולה על
10
תווים.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: |
מספר שלם |
<ValueLimits>/<ProcessingInstructionData> רכיב
מציינת מגבלת תווים לכל טקסט של הוראה לעיבוד שנמצא ב-XML מהמסמך.
למשל, שימו לב ל-XML הבא:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<ProcessingInstructionData>
בקטע הקוד של המדיניות שלמטה, יתבצע אימות שהטקסט של הוראת העיבוד
type="text/xsl" href="style.xsl"
לא חורג מ-10
תווים.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
ברירת המחדל: | אם לא תציינו מגבלה, המערכת תחיל את ערך ברירת המחדל של -1 ,
שהמערכת שווה ערך ל'אין הגבלה'. |
נוכחות: | אופציונלי |
סוג: |
מספר שלם |
התייחסות לשגיאות
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.xmlthreatprotection.ExecutionFailed |
500 | The XMLThreatProtection policy can throw many different types of ExecutionFailed errors. Most of these errors occur when a specific threshold set in the policy is exceeded. These types of errors include: element name length, child count, node depth, attribute count, attribute name length, and many others. You can see the complete list in the XMLThreatProtection policy runtime error troubleshooting topic. | build |
steps.xmlthreatprotection.InvalidXMLPayload |
500 |
This error occurs if the input message payload specified by the XMLThreatProtection policy's <Source> element is not a valid XML Document.
|
build |
steps.xmlthreatprotection.SourceUnavailable |
500 |
This error occurs if the message
variable specified in the <Source> element is either:
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 |
This error occurs if the <Source> element is set to a variable which
is not of type
message.
|
build |
Notes:
- The error name ExecutionFailed is the default error name and will be returned regardless of the type of error detected; however, this default can be changed by setting an organization-level property. When this property is set, the error name will reflect the actual error. For example, "TextExceeded" or "AttrValueExceeded". See Usage Notes for details.
- The 500 HTTP status is the default; however, the HTTP Status can be changed to 400 for request flow faults by setting an organization-level property. See Usage Notes for details.
Deployment errors
None.
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "SourceUnavailable" |
xmlattack.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | xmlattack.XPT-SecureRequest.failed = true |
Example error response
{ "fault": { "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2", "detail": { "errorcode": "steps.xmlthreatprotection.ExecutionFailed" } } }
Example fault rule
<FaultRule name="XML Threat Protection Policy Faults"> <Step> <Name>AM-CustomErrorResponse</Name> <Condition>(fault.name Matches "ExecutionFailed") </Condition> </Step> <Condition>(xmlattack.XPT-SecureRequest.failed = true) </Condition> </FaultRule>
סכימות
הערות שימוש
כל שרת שמקבל נתונים אונליין כפוף למתקפה, בין אם באופן זדוני ובין אם לאו. חלק מהמתקפות מנצלים את הגמישות של XML על ידי בניית מסמכים לא חוקיים את הפוטנציאל לפגוע במערכות עורפיות. מסמכי XML פגומים או מורכבים מאוד שגורמת לשרתים להקצות יותר זיכרון ממה שזמין, מה שמקשר בין משאבי המעבד (CPU) לזיכרון, מנתחים לקריסה, ובדרך כלל השבתה של עיבוד ההודעות ויצירת ברמת האפליקציה התקפות מניעת שירות (DoS).
הגדרה של שגיאות הגנה מאיומים
מידע חשוב במקרה של יצירת כללי שגיאה למדיניות הזו: על ידי
כברירת מחדל, Edge יקפיץ את קוד הסטטוס 'שגיאת שרת פנימית' מסוג HTTP 500 ושגיאת ביצוע נכשל
קוד אם ההודעה לא עוברת את המדיניות של JSON או XML בנושא הגנה מפני איומים. אפשר לשנות
את התנהגות השגיאה הזו בנכס חדש ברמת הארגון. בעת הגדרת הארגון
המאפיין features.isPolicyHttpStatusEnabled
מוגדר ל-TRUE, הפונקציה הבאה
מה קורה:
- בקשה: לכל תהליך בקשה מצורפת מדיניות הגנה מפני איומים, הודעות לא חוקיות מוחזר 400 קוד סטטוס בקשה שגוי יחד עם שגיאה תואמת במדיניות הקוד (במקום רק ExecutionFailed).
- תגובה: לכל תהליך תגובה שמצורפת מדיניות הגנה מפני איומים, יש הודעות לא תקינות עדיין מוחזר קוד הסטטוס 500 Internal Server Error, קודי השגיאות התואמים של המדיניות נעשים (ולא רק ביצוע נכשל).
לקוחות Cloud צריכים לפנות לתמיכה של Apigee Edge כדי להגדיר את מאפיין הארגון.