XMLThreatProtection-Richtlinie

Diese Seite gilt für Apigee und Apigee Hybrid.

Apigee Edge-Dokumentation aufrufen

Mit der XMLThreatProtection-Richtlinie können Sie XML-Sicherheitslücken beheben und Angriffe auf Ihre API minimieren. Sie können die Richtlinie auch verwenden, um Angriffe über XML-Nutzlasten basierend auf konfigurierten Grenzwerten zu erkennen. Mit den folgenden Ansätzen können Sie XML-Bedrohungen prüfen:

  • Fehlerhafte oder fehlgeformte Nachrichten vor dem Parsen analysieren
  • Den Nachrichteninhalt auf bestimmte Keywords oder Muster prüfen, die ausgeschlossen werden sollen

Diese Richtlinie ist eine erweiterbare Richtlinie und die Verwendung dieser Richtlinie kann je nach Apigee-Lizenz Auswirkungen auf die Kosten oder die Nutzung haben. Informationen zu Richtlinientypen und Auswirkungen auf die Nutzung finden Sie unter Richtlinientypen.

Elementverweis

Die Elementreferenz beschreibt die Elemente und Attribute der Richtlinie „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>-Attribute

<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1">

In der folgenden Tabelle werden Attribute beschrieben, die für alle übergeordneten Richtlinienelemente gelten:

Attribut Beschreibung Standard Presence
name

Der interne Name der Richtlinie. Der Wert des Attributs name kann Buchstaben, Ziffern, Leerzeichen, Bindestriche, Unterstriche und Punkte enthalten. Dieser Wert darf 255 Zeichen nicht überschreiten.

Optional können Sie das Element <DisplayName> verwenden, um die Richtlinie im Proxy-Editor der Verwaltungs-UI mit einem anderen Namen in einer natürlichen Sprache zu versehen.

Erforderlich
continueOnError

Legen Sie false fest, um einen Fehler zurückzugeben, wenn eine Richtlinie fehlschlägt. Dies ist für die meisten Richtlinien das erwartete Verhalten.

Legen Sie true fest, damit die Ablaufausführung auch nach dem Fehlschlagen einer Richtlinie fortgesetzt wird. Siehe auch:

false Optional
enabled

Setzen Sie den Wert auf true, um die Richtlinie zu erzwingen.

Legen Sie false fest, um die Richtlinie zu deaktivieren. Die Richtlinie wird nicht erzwungen, selbst wenn sie mit einem Ablauf verknüpft ist.

true Optional
async

Dieses Attribut wurde verworfen.

false Verworfen

<DisplayName>-Element

Wird zusätzlich zum Attribut name verwendet, um die Richtlinie im Proxy-Editor der Verwaltungs-UI mit einem anderen Namen in einer natürlichen Sprache zu versehen.

<DisplayName>Policy Display Name</DisplayName>
Standard

Wenn Sie dieses Element weglassen, wird der Wert des Namensattributs name der Richtlinie verwendet.

Presence Optional
Typ String

<NameLimits>-Element

Gibt Zeichenbeschränkungen an, die von der Richtlinie geprüft und erzwungen werden sollen.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>
</NameLimits>
Standard:
Präsenz: Optional
Typ:

<NameLimits>/<Element>-Element

Gibt ein Limit für die maximal zulässige Zeichenanzahl in einem Elementnamen im XML-Dokument an.

Betrachten Sie beispielsweise das folgende XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>

Beim Analysieren der oben angegebenen XML-Datei überprüft der Elementwert <Element> im Richtlinien-Snippet unten die Elementnamen (book , title, author und year) dürfen nicht länger als 10 Zeichen sein.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>
</NameLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ: Ganzzahl

<NameLimits>/<Attribute>-Element

Gibt eine Höchstzahl von Zeichen an, die in jedem Attributnamen im XML-Dokument zulässig sind.

Betrachten Sie beispielsweise das folgende XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>

Beim Analysieren des oben dargestellten XML-Elements wird mit dem <Attribute>-Elementwert im Richtlinien-Snippet unten überprüft, ob der category-Attributname nicht länger als 10 Zeichen ist.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>
</NameLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ: Ganzzahl

<NameLimits>/<NamespacePrefix>-Element

Gibt ein Limit für die maximal zulässige Anzahl an Zeichen im Namespace-Präfix im XML-Dokument an.

Betrachten Sie beispielsweise das folgende XML:

<ns1:myelem xmlns:ns1="http://ns1.com"/>

Beim Analysieren der oben angegebenen XML-Datei überprüft der Wert des <NamespacePrefix>-Elements im Richtlinien-Snippet unten, ob das Namespace-Präfix ns1 nicht mehr als 10 Zeichen umfasst.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>
</NameLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ: Ganzzahl

<NameLimits>/<ProcessingInstructionTarget>-Element

Gibt ein Limit für die maximale Anzahl von Zeichen an, die im Ziel einer Verarbeitungsanleitung im XML-Dokument zulässig ist.

Betrachten Sie beispielsweise das folgende XML:

<?xml-stylesheet type="text/xsl" href="style.xsl"?>

Bei der obigen XML-Analyse wird durch den Elementwert <ProcessingInstructionTarget> im Richtlinien-Snippet unten überprüft, ob das Ziel der Verarbeitungsanweisung xml-stylesheet 10Zeichen nicht überschreitet.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>
</NameLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ: Ganzzahl

<Source>-Element

Nachricht, die auf XML-Nutzlast-Angriffe geprüft werden soll. Dies ist meistens auf request gesetzt, da Sie in der Regel eingehende Anfragen von Clientanwendungen validieren müssen. Ist message festgelegt, bewertet dieses Element die Anfragenachricht automatisch, wenn sie an den Anfragefluss angehängt wird, und die Antwortnachricht, wenn sie an den Antwortfluss angehängt wird.

<Source>request</Source>
Standard: Anfrage
Präsenz: Optional
Typ:

String.

Wählen Sie request, response oder message aus.

<StructuralLimits>-Element

Gibt strukturelle Limits an, die von der Richtlinie geprüft und erzwungen werden sollen.

<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Standard:
Präsenz: Optional
Typ:

<StructuralLimits>/<NodeDepth>-Element

Gibt die maximal zulässige Knotentiefe in der XML an.

<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ:

Ganzzahl

<StructuralLimits>/<AttributeCountPerElement>-Element

Gibt die maximal zulässige Anzahl an Attributen für jedes Element an.

Betrachten Sie beispielsweise das folgende XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
Beim Analysieren der oben angegebenen XML-Datei überprüft der Wert des Elements <AttributeCountPerElement> im Richtlinien-Snippet, ob die Elemente book, title, author und year jeweils nicht mehr als 2 Attribute haben. Beachten Sie, dass Attribute zum Definieren von Namespaces nicht gezählt werden.
<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ:

Ganzzahl

<StructuralLimits>/<NameSpaceCountPerElement>-Element

Gibt die maximal zulässige Anzahl von Namespace-Definitionen für jedes Element an.

Betrachten Sie beispielsweise das folgende XML:

<e1 attr1="val1" attr2="val2">
    <e2 xmlns="http://apigee.com" xmlns:yahoo="http://yahoo.com" one="1" yahoo:two="2"/>
</e1>

Beim Analysieren der oben angegebenen XML-Datei überprüft der Wert für das <NamespaceCountPerElement>-Element im Richtlinien-Snippet unten, ob die Elemente e1 und e2 nicht mehr als 2 Namespace-Definitionen enthalten. , um die Option zu aktivieren. In diesem Fall hat <e1> 0 Namespace-Definitionen und <e2> zwei Namespace-Definitionen: xmlns="http://apigee.com" und 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>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ:

Ganzzahl

<StructuralLimits>/<ChildCount> Element

Gibt die maximale Anzahl an untergeordneten Elementen für die einzelnen Elemente an.

<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ:

Ganzzahl

Attribute

Attribut Standard Präsenz
includeComment wahr Optional
includeElement wahr Optional
includeProcessingInstructions wahr Optional
includeText wahr Optional

<ValueLimits>-Element

Gibt Zeichenbeschränkungen für zu überprüfende und zu erzwingende Werte an.

<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Standard:
Präsenz: Optional
Typ:

<ValueLimits>/<Text>-Element

Gibt eine Zeichenbeschränkung für alle im XML-Dokument vorhandenen Textknoten an.

Betrachten Sie beispielsweise das folgende XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
Beim Analysieren der oben angegebenen XML-Datei überprüft der Wert des Elements <Text> im Richtlinien-Snippet unten, ob die Elementtextwerte Learning XML, Erik T. Ray, und 2003 jeweils 15 Zeichen nicht überschreiten.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ:

Ganzzahl

<ValueLimits>/<Attribute> Element

Gibt eine Zeichenbeschränkung für alle im XML-Dokument vorhandenen Attributwerte an.

Betrachten Sie beispielsweise das folgende XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
Beim Analysieren der oben angegebenen XML-Datei überprüft der Wert für das <Attribute>-Element im Richtlinien-Snippet, ob der WEB-Attributwert 10 Zeichen nicht überschreitet.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ:

Ganzzahl

<ValueLimits>/<NamespaceURI>-Element

Gibt eine Zeichenbeschränkung für alle Namespace-URIs im XML-Dokument an.

Betrachten Sie beispielsweise das folgende XML:

<ns1:myelem xmlns:ns1="http://ns1.com"/>
Beim Analysieren der oben angegebenen XML-Datei überprüft der Wert für das <NamespaceURI>-Element im Richtlinien-Snippet unten, ob der Namespace-URI-Wert http://ns1.com nicht länger als 10 Zeichen ist.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ:

Ganzzahl

<ValueLimits>/<Comment>-Element

Gibt eine Zeichenbeschränkung für alle vorhandenen XML-Dokumente an.

Betrachten Sie beispielsweise das folgende XML:

<book category="WEB">
   <!-- This is a comment -->
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
Beim Analysieren des oben dargestellten XML-Elements wird mit dem <Comment>-Elementwert im Richtlinien-Snippet unten überprüft, ob der Kommentartext This is a comment nicht mehr als 10 Zeichen umfasst.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ:

Ganzzahl

<ValueLimits>/<ProcessingInstructionData>-Element

Gibt eine Zeichenbeschränkung für den Verarbeitungstext des XML-Dokuments an.

Betrachten Sie beispielsweise das folgende XML:

<?xml-stylesheet type="text/xsl" href="style.xsl"?>
Bei der obigen XML-Analyse wird durch den Elementwert <ProcessingInstructionData> im Richtlinien-Snippet unten überprüft, ob der Text der Verarbeitungsanweisung type="text/xsl" href="style.xsl" 10 Zeichen nicht überschreitet.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Standard: Wenn Sie kein Limit angeben, wendet das System einen Standardwert -1 an, der vom System als "kein Limit" gedeutet wird.
Präsenz: Optional
Typ:

Ganzzahl

Fehlerreferenz

This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee 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.
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.
steps.xmlthreatprotection.SourceUnavailable 500 This error occurs if the message variable specified in the <Source> element is either:
  • Out of scope (not available in the specific flow where the policy is being executed)
  • Is not one of the valid values request, response, or message
steps.xmlthreatprotection.NonMessageVariable 500 This error occurs if the <Source> element is set to a variable which is not of type message.

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>

Schemas

Verwendungshinweise

Jeder Server, der Online-Daten empfängt, wird Angriffen entweder schädlich oder unbeabsichtigt ausgeführt. Einige Angriffe nutzen die Flexibilität von XML, indem sie ungültige Dokumente erstellen, die das Risiko von Back-End-Systemen beeinträchtigen können. Veraltete oder extrem komplexe XML-Dokumente können dazu führen, dass Server mehr Speicher zuweisen, als verfügbar ist, die CPU- und Speicherressourcen heraufsetzen, Parser abstürzen und die Nachrichtenverarbeitung deaktivieren und eine Ablehnung auf Anwendungsebene vornehmen. Dienstangriffen.

Bedrohungsschutzfehlerkonfiguration

Wichtige Informationen zum Erstellen von FaultRules-Richtlinien für diese Richtlinie:Standardmäßig löst Apigee bei einem Fehler "HTTP 500 Internal Server Error Statuscode" und bei einem Fehler "ExecutionFailed" den Fehler aus. einer JSON- oder XML Threat Protection-Richtlinie. Sie können dieses Fehlerverhalten mit einer neuen Property auf Organisationsebene ändern. Wenn Sie das Organisationsattribut features.isPolicyHttpStatusEnabled auf "true" setzen, geschieht Folgendes:

  • Anfrage: Wenn eine Bedrohungsschutzrichtlinie an einen Anfrageablauf angehängt wird, geben ungültige Nachrichten einen 400 Bad Request-Statuscode zusammen mit einem entsprechenden Richtlinienfehlercode (und nicht nur ExecutionFailed) zurück.
  • Antwort: Wenn eine Bedrohungsschutzrichtlinie an einen Antwortablauf angehängt wird, wird bei ungültigen Nachrichten weiterhin der Statuscode 500 Interner Serverfehler zurückgegeben und einer der entsprechenden Richtlinienfehlercodes wird ausgegeben (statt nur "ExecutionFailed").

Cloud-Kunden müssen sich an Google Cloud Customer Care wenden, um das Organisationsattribut festzulegen.

curl -u email:password -X POST -H "Content-type:application/xml" http://host:8080/v1/o/myorg -d \
"<Organization type="trial" name="MyOrganization">
    <Environments/>
    <Properties>
        <Property name="features.isPolicyHttpStatusEnabled">true</Property>
        ...
    </Properties>
</Organization>"

Weitere Informationen

JSON Threat Protection-Richtlinie

Regular Expression Protection-Richtlinie