אתם צופים במסמכי התיעוד של 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> בקטע המדיניות הבא יאמת שאורך קידומת מרחב השמות 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> element
מציין את המספר המקסימלי של רכיבי צאצא שמותרים לכל רכיב.
<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, שהמערכת מפרשת כ'ללא מגבלה'. |
| נוכחות: | אופציונלי |
| סוג: |
מספר שלם |
הפניה לשגיאה
בקטע הזה מתוארים קודי השגיאה והודעות השגיאה שהוחזרו, ומשתני התקלה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת את המידע הזה אם אתם מפתחים כללי כשל כדי לטפל בתקלות. מידע נוסף זמין במאמר מה צריך לדעת? מידע על שגיאות שקשורות למדיניות וטיפול פגמים.
שגיאות זמן ריצה
השגיאות האלה עשויות להתרחש כשהמדיניות מופעלת.
| קוד תקלה | סטטוס HTTP | סיבה | תיקון |
|---|---|---|---|
steps.xmlthreatprotection.ExecutionFailed |
500 | המדיניות XMLThreatProtection יכולה לגרום לסוגים שונים של שגיאות ביצוע שנכשלו. רוב השגיאות האלה מתרחשות כשחורגים מסף מסוים שנקבע במדיניות. האלה סוגי שגיאות כוללים: אורך שם הרכיב, מספר ילדים, עומק צמתים, מספר מאפיינים, אורך שם המאפיין, ועוד רבים אחרים. אפשר לראות את הרשימה המלאה בנושא פתרון בעיות שקשורות לשגיאות זמן ריצה במדיניות XMLThreatProtection. | build |
steps.xmlthreatprotection.InvalidXMLPayload |
500 |
השגיאה הזו מתקבלת אם המטען הייעודי (payload) של הודעת הקלט שצוין על ידי הרכיב <Source> של מדיניות XMLThreatProtection הוא לא מסמך XML חוקי.
|
build |
steps.xmlthreatprotection.SourceUnavailable |
500 |
השגיאה הזו מתקבלת אם ההודעה
המשתנה שמצוין ברכיב <Source> הוא:
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 |
השגיאה הזו מתקבלת אם הרכיב <Source> מוגדר למשתנה
אינו מסוג
message.
|
build |
הערות:
- שם השגיאה ExecutionFailed הוא שם ברירת המחדל של השגיאה והוא יוחזר ללא קשר ל- סוג השגיאה שזוהה, אבל אפשר לשנות את ברירת המחדל הזאת על ידי הגדרה של נכס ברמת הארגון. כשהמאפיין הזה מוגדר, שם השגיאה ישקף את שגיאה. לדוגמה, "חריג את הטקסט" או "AttrValueExceeded". בהערות השימוש מוסבר פרטים.
- סטטוס ה-HTTP 500 הוא ברירת המחדל. עם זאת, ניתן לשנות את מצב HTTP ל-400 שגיאות בתהליך הבקשה על ידי הגדרת נכס ברמת הארגון. בהערות השימוש מוסבר פרטים.
שגיאות פריסה
ללא.
משתני כשל
המשתנים האלה מוגדרים כשמתרחשת שגיאה בסביבת זמן הריצה. מידע נוסף זמין במאמר מה צריך לדעת? על שגיאות שקשורות למדיניות.
| משתנים | איפה | דוגמה |
|---|---|---|
fault.name="fault_name" |
fault_name הוא שם השגיאה, כפי שמצוין בטבלה שגיאות זמן ריצה שלמעלה. שם השגיאה הוא החלק האחרון בקוד השגיאה. | fault.name Matches "SourceUnavailable" |
xmlattack.policy_name.failed |
policy_name הוא השם שצוין על ידי המשתמש של המדיניות שגרמה לבעיה. | xmlattack.XPT-SecureRequest.failed = true |
דוגמה לתגובת שגיאה
{ "fault": { "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2", "detail": { "errorcode": "steps.xmlthreatprotection.ExecutionFailed" } } }
דוגמה לכלל שגוי
<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 פגומים או מורכבים במיוחד עלולים לגרום לשרתים להקצות יותר זיכרון ממה שזמין, ולגרום לשימוש מוגזם במעבד ובמשאבי הזיכרון, לקריסת מנתחי הנתונים ולביטול עיבוד ההודעות, וגם ליצירת מתקפות מניעת שירות ברמת האפליקציה.
שגיאה בהגדרת ההגנה מפני איומים
מידע חשוב אם אתם יוצרים רכיבי FaultRule למדיניות הזו: כברירת מחדל, Edge מחזיר קוד סטטוס של שגיאת שרת פנימית HTTP 500 וקוד שגיאה של ExecutionFailed אם הודעה לא עוברת את מדיניות ההגנה מפני איומים בפורמט JSON או XML. אפשר לשנות את התנהגות השגיאה הזו באמצעות נכס חדש ברמת הארגון. כשמגדירים את מאפיין הארגון features.isPolicyHttpStatusEnabled למצב True, מתרחשת ההתנהגות הבאה:
- בקשה: אם מדיניות להגנה מפני איומים מצורפת לכל זרימת בקשות, הודעות לא תקינות מחזירות קוד סטטוס של בקשה שגויה (400), יחד עם קוד שגיאה תואם של המדיניות (במקום רק ExecutionFailed).
- תשובה: אם מדיניות להגנה מפני איומים מצורפת לכל זרימת תשובות, הודעות לא תקינות עדיין מחזירות קוד סטטוס 500 Internal Server Error, ואחד מקודי השגיאה התואמים של המדיניות מופעל (במקום רק ExecutionFailed).
לקוחות Cloud צריכים ליצור קשר עם התמיכה של Apigee Edge כדי להגדיר את מאפיין הארגון.