RegularExpressionProtection-Richtlinie

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

Was

Extrahiert Informationen aus einer Nachricht (z. B. URI-Pfad, Abfrageparameter, Header, Formular-Parameter, Variable, XML-Nutzlast oder JSON-Nutzlast) und wertet diesen Inhalt anhand von vordefinierten regulären Ausdrücken aus. Wenn welche der angegebenen regulären Ausdrücke als "true" ausgewertet wird, wird die Nachricht als Bedrohung eingestuft und abgelehnt.

Videos

In den folgenden Videos erfahren Sie mehr über die Richtlinie zum Schutz vor regulären Ausdrücken.

Video Beschreibung
Schutz gegen SQL-Injection-Angriffe (New Edge) Schutz vor SQL-Injection-Angriffen mithilfe der Richtlinie zum Schutz vor regulären Ausdrücken in die Benutzeroberfläche von New Edge an.
Schutz gegen SQL-Injection-Angriffe (Classic Edge) Schutz vor SQL-Injection-Angriffen mithilfe der Richtlinie zum Schutz vor regulären Ausdrücken in der Classic Edge-Benutzeroberfläche.

Beispiele

GitHub

Im Beispiel regex-protection auf GitHub wird gezeigt, wie Sie potenzielle SQL-Injection-Angriffe herausgegeben über ein Abfrageparameter abfangen. Darüber hinaus wird im Beispiel gezeigt, wie ein allgemeiner 400-Fehlerstatus festgelegt wird, um zu verhindern, dass Hacker nützliche Informationen aus der Antwort erhalten.

JavaScript mit Angriffsschutz

<RegularExpressionProtection name="JsonPathRegExProtection">
    <DisplayName>Regular Expression Protection 1</DisplayName>
    <Source>request</Source>
    <JSONPayload escapeSlashCharacter="true">
       <JSONPath>
          <Expression>$</Expression>
          <Pattern>&lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*\/\s*script\s*&gt;
          </Pattern>
          <Pattern>n\s*\\\\\s*slash</Pattern>
          <Pattern>n\s*\/\s*slash</Pattern>
          <Pattern>n\s*\\"\s*quotes</Pattern>
          <Pattern>n\s*\\b\s*space</Pattern>
          <Pattern>n\s*\\f\s*forwardfeed</Pattern>
          <Pattern>n\s*\\n\s*newline</Pattern>
          <Pattern>n\s*\\r\s*carria</Pattern>
          <Pattern>n\s*\\t\s*tab</Pattern>
          <Pattern>n\s*\\uFFFF\s*hex</Pattern>
       </JSONPath>
    </JSONPayload>
 </RegularExpressionProtection>

Das obige Beispiel veranschaulicht die Verwendung der Richtlinie "RegularExpressionProtection" zur Bewertung von JSON-Nutzlasten hinsichtlich JavaScript-include-Angriffe. Insbesondere wird der von <JSONPath>/<Expression> extrahierte Inhalt mit dem regulären Ausdruck in <JSONPath>/<Pattern> abgeglichen.

Wenn der reguläre Ausdruck in Ihrem <JSONPath>/<Pattern> XML-reservierte Zeichen (", &, ', < oder .) enthält, müssen Sie sie in XML codieren, bevor Sie sie in die XML-Konfigurationsdatei der Richtlinie einfügen. Im obigen Beispiel wurde der reguläre Ausdruck <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*> als &lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*\/\s*script\s*&gt; in XML codiert.

Wenn Ihr regulärer Ausdruck Schrägstriche (/) enthält, müssen Sie diese außerdem maskieren, indem Sie das escapeSlashCharacter-Attribut <JSONPayload> auf true setzen.

Übereinstimmungen ohne Beachtung der Groß-/Kleinschreibung

Dies ist ein häufiger Anwendungsfall, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird. Dieses Beispiel zeigt, wie Sie dies mit dem Konstrukt (?i) in einem regulären Ausdruck erreichen. In diesem Beispiel werden beispielsweise DELETE, delete und Delete als wahr ausgewertet.

<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>

Über die Regular Expression Protection-Richtlinie

Mit Apigee Edge können Sie reguläre Ausdrücke konfigurieren, die während der Laufzeit anhand des API-Traffics evaluiert werden, um häufige Bedrohungen auf Inhaltsebene zu identifizieren, Muster erkennen.

Ein regulärer Ausdruck, kurz Regex, ist eine Reihe von Strings, die ein Muster in einem String angeben. Mit regulären Ausdrücken können Inhalte programmatisch nach Mustern ausgewertet werden. Mit regulären Ausdrücken lässt sich beispielsweise eine E-Mail-Adresse auf ihre korrekte Struktur prüfen. Weitere Informationen finden Sie unter Reguläre Ausdrücke in den Java-Anleitungen.

Die häufigste Verwendung von RegularExpressionProtection ist die Auswertung von JSON- und XML-Nutzlasten auf schädliche Inhalte.

Kein regulärer Ausdruck kann alle inhaltsbasierten Angriffe eliminieren und mehrere Mechanismen sollten zu einem umfassenden Schutz kombiniert werden. In diesem Abschnitt werden einige empfohlene Muster zum Ausschließen von Inhalten beschrieben.

Beispiel für Ausschlussmuster

Reguläre Ausdrücke müssen in der XML-Konfigurationsdatei der Richtlinie XML-codiert sein.

Name Regulärer Ausdruck
SQL-Einschleusung
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))
Server-Side Include-Einschleusung
<!--#(include|exec|echo|config|printenv)\s+.*

XML-codiert:

&lt;!--#(include|exec|echo|config|printenv)\s+.*
XPath-abgekürzte Syntax-Einschleusung
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+
Erweiterte XPath-Syntax-Einschleusung
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling))
JavaScript-Einschleusung
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*>

XML-codiert:

&lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*/\s*script\s*&gt;
Java-Ausnahme-Einschleusung
.*?Exception in thread.*

Content-Type-Header in einer Anfrage mit einer XML- oder JSON-Nutzlast festlegen

Die Nutzlast der Richtlinie zum Schutz vor regulären Ausdrücken kann die folgenden Elemente enthalten:

  • <XMLPayload>-Element: Gibt an, dass Informationen aus einer XML-Nutzlast extrahiert und mit dem angegebenen regulären Ausdruck abgeglichen werden müssen.

    Wenn Sie <XMLPayload> in der Richtlinie verwenden, muss der Header Content-Type der Anfrage ein XML-Inhaltstyp wie application/xml oder text/xml sein.

  • <JSONPayload>-Element: Gibt an, dass Informationen aus einer JSON-Nutzlast extrahiert und mit dem angegebenen regulären Ausdruck abgeglichen werden müssen.

    Wenn Sie <JSONPayload> in der Richtlinie verwenden, muss der Header Content-Type der Anfrage ein JSON-Inhaltstyp wie application/json sein.

In der Regel entwerfen Sie eine API, um entweder XML oder JSON zu akzeptieren. Es kann jedoch ein Szenario geben, in dem die API beides akzeptiert. Sie können dann eine Richtlinie für den Schutz vor regulären Ausdrücken definieren, in der die Elemente <XMLPayload> und <JSONPayload> verwendet werden. Basierend auf dem Wert des Headers Content-Type würde nur ein Element für eine bestimmte Anfrage angewendet werden.

Elementverweis

Der Elementverweis beschreibt die Elemente und Attribute der RegularExpressionProtection-Richtlinie.

<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
   <DisplayName>Regular Expression Protection 1</DisplayName>
   <Source>response</Source>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <URIPath>
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </URIPath>
   <QueryParam name="a-query-param">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </QueryParam>
   <Header name="a-header">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </Header>
   <FormParam name="a-form-param">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </FormParam>
   <Variable name="request.content">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </Variable>
   <XMLPayload>
     <Namespaces>
       <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     </Namespaces>
     <XPath>
       <Expression>/apigee:Greeting/apigee:User</Expression>
       <Type>string</Type>
       <Pattern>REGEX PATTERN</Pattern>
       <Pattern>REGEX PATTERN</Pattern>
     </XPath>
   </XMLPayload>
   <JSONPayload>
     <JSONPath>
       <Expression>$.store.book[*].author</Expression>
       <Pattern>REGEX PATTERN</Pattern>
       <Pattern>REGEX PATTERN</Pattern>
     </JSONPath>
    </JSONPayload>
</RegularExpressionProtection>

<RegularExpressionProtection>-Attribute

<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">

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

Attribut Beschreibung Standard Präsenz
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.

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 Veraltet

<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>
Standardeinstellung

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

Präsenz Optional
Typ String

<Source>-Element

Gibt die Nachricht an, aus der Informationen extrahiert werden sollen.

Wenn das Element <Source> weggelassen wird, wird für den Wert standardmäßig message eingesetzt. Beispiel: <Source>message</Source> Wenn message festgelegt ist, verwendet die Richtlinie die Anfragenachricht als Quelle, wenn sie an einen Anfrageablauf angehängt ist. Ebenso verwendet die Richtlinie die Antwortnachricht, wenn sie an einen Antwortablauf angehängt ist.

Wenn die Quellnachricht nicht aufgelöst werden kann oder in einen Nicht-Nachrichtentyp aufgelöst wird, gibt die Richtlinie einen Fehler zurück.

<Source>response</Source>
Standard:
Präsenz: Optional
Typ: String

<IgnoreUnresolvedVariables>-Element

Bestimmt, ob die Richtlinie einen Fehler zurückgibt, wenn eine nicht auflösbare Variable gefunden wird.

Wenn auf false (Standardeinstellung) gesetzt ist, gibt die Richtlinie einen Fehler zurück, wenn eine nicht auflösbare Variable gefunden wird. Wenn true festgelegt ist, wird die nicht aufgelöste Variable wie ein leerer String (null) behandelt.

<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Standard: false
Präsenz: Optional
Typ: Boolean

<URIPath>-Element

Gibt an, dass Informationen aus dem Anfrage-URI-Pfad extrahiert und mit den angegebenen regulären Ausdrücken abgeglichen werden müssen. Sie müssen mindestens ein <Pattern>-Element angeben, das ein abzugleichendes Muster für reguläre Ausdrücke angibt.

<URIPath>
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</URIPath>
Standard:
Präsenz: Optional
Typ:

<QueryParam>-Element

Gibt an, dass Informationen aus dem Anfrageabfrageparameter extrahiert und mit den angegebenen regulären Ausdrücken abgeglichen werden müssen. Sie müssen mindestens ein <Pattern>-Element angeben, das ein abzugleichendes Muster für reguläre Ausdrücke angibt.

<QueryParam name="a-query-param">
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</QueryParam>
Standard:
Präsenz: Optional
Typ:

Attribute

Attribut Beschreibung Standard Präsenz
Name Name des Anfrage-Abfrageparameter, aus dem Informationen für den Abgleich mit den angegebenen regulären Ausdrücken extrahiert werden sollen. Erforderlich

<Header>-Element

Gibt an, dass Informationen aus den Anfrage- und Antwort-Headern extrahiert und mit den angegebenen regulären Ausdrücken abgeglichen werden müssen. Sie müssen mindestens ein <Pattern>-Element angeben, das ein abzugleichendes Muster für reguläre Ausdrücke angibt.

<Header name="a-header">
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</Header>
Standard:
Präsenz: Optional
Typ:

Attribute

Attribut Beschreibung Standard Präsenz
Name

Name des Anfrage- und Antwortheaders, aus dem Informationen für den Abgleich mit den angegebenen regulären Ausdrücken extrahiert werden müssen.

Erforderlich

<FormParam>-Element

Gibt an, dass Informationen aus dem Anfrageformularparameter extrahiert und mit den angegebenen regulären Ausdrücken abgeglichen werden müssen. Sie müssen mindestens ein <Pattern>-Element angeben, das ein abzugleichendes Muster für reguläre Ausdrücke angibt.

<FormParam name="a-form-param">
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</FormParam>
Standard:
Präsenz: Optional
Typ:

Attribute

Attribut Beschreibung Standard Präsenz
Name

Name des Anfrageformularparameters, aus dem Informationen zum Abgleichen mit den angegebenen regulären Ausdrücken extrahiert werden sollen.

Erforderlich

<Variable>-Element

Gibt an, dass Informationen aus der angegebenen Variable extrahiert und mit den angegebenen regulären Ausdrücken abgeglichen werden müssen.

<Variable name="request.content">
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</Variable>
Standard:
Präsenz: Optional
Typ:

Attribute

Attribut Beschreibung Standard Präsenz
Name

Name der Variable, aus der Informationen für den Abgleich mit den angegebenen regulären Ausdrücken extrahiert werden sollen.

Erforderlich

<XMLPayload>-Element

Gibt an, dass Informationen aus einer XML-Nutzlast extrahiert und mit den angegebenen regulären Ausdrücken abgeglichen werden müssen.

<XMLPayload>
   <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
   </Namespaces>
   <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
   </XPath>
</XMLPayload>
Standard:
Präsenz: Optional
Typ:

<XMLPayload>/<Namespaces>-Element

Gibt die Namespaces an, die in der XPath-Bewertung verwendet werden sollen.

<XMLPayload>
   <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
   </Namespaces>
   <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
   </XPath>
</XMLPayload>
Standard:
Präsenz: Optional
Typ: String

<XMLPayload>/<Namespaces>/<Namespace>-Element

Gibt jeden Namespace an, der in der XPath-Bewertung verwendet werden soll.
<Namespaces>
   <Namespace prefix="apigee">http://www.apigee.com</Namespace>
</Namespaces>
Standard:
Präsenz: Optional
Typ: String

Attribute

Attribut Beschreibung Standard Präsenz
prefix

Liefert ein Präfix, um einen bestimmten Namespace zu qualifizieren.

Erforderlich

<XMLPayload>/<XPath>-Element

Gibt den XPath an, der ausgewertet werden soll.
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
Standard:
Präsenz: Optional
Typ:

<XMLPayload>/<XPath>/<Expression>-Element

Gibt den für den Ausdruck definierten XPath an. Es werden nur XPath 1.0-Ausdrücke unterstützt. Beispielsweise extrahiert <Expression>/company/employee[@age>=$request.header.age]</Expression> Details für Mitarbeiter, deren Alter größer oder gleich dem in request.header.age angegebenen Wert ist.
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
Standard:
Präsenz: Optional
Typ: String

<XMLPayload>/<XPath>/<Type>-Element

Gibt den Datentyp an.
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
Standard: String
Präsenz: Optional
Typ: String
Zulässige Werte:

String. Zulässige Werte string, boolean, int, long, float, double und nodeset.

<XMLPayload>/<XPath>/<Pattern>-Element

Definiert das Muster für reguläre Ausdrücke. Wenn ein regulärer Ausdruck im Element <Pattern> Zeichen mit XML-Reservierung (", &, ', < oder .) enthält, müssen Sie sie in XML-Code codieren, bevor Sie sie hinzufügen.

<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
Standard:
Präsenz: Erforderlich
Typ: String

<JSONPayload>-Element

Gibt an, dass Informationen aus einer JSON-Nutzlast extrahiert und mit den angegebenen regulären Ausdrücken abgeglichen werden müssen.

<JSONPayload>
   <JSONPath>
      <Expression>$.store.book[*].author</Expression>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
   </JSONPath>
</JSONPayload>
Standard:
Präsenz: Optional
Typ:

Attribute

Attribut Beschreibung Standard Präsenz
escapeSlashCharacter

Legen Sie true fest, um alle Schrägstriche (/) in den regulären Ausdrücken in <JSONPath>/<Pattern> zu maskieren.

wahr Optional

<JSONPayload>/<JSONPath>/<Expression>-Element

Gibt den JSONPath-Ausdruck an, der für die Variable definiert wurde.

<JSONPath>
   <Expression>$.store.book[*].author</Expression>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</JSONPath>
Standard:
Präsenz: Optional
Typ: String

<JSONPayload>/<JSONPath>/<Pattern>

Definiert das Muster für reguläre Ausdrücke. Wenn ein regulärer Ausdruck im Element <Pattern> Zeichen mit XML-Reservierung (", &, ', < oder .) enthält, müssen Sie sie in XML-Code codieren, bevor Sie sie hinzufügen.

<JSONPath>
   <Expression>$.store.book[*].author</Expression>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</JSONPath>
Standard:
Präsenz: Erforderlich
Typ: String

Fehlerreferenz

This section describes the error codes and messages returned and fault variables set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. If you want to capture an error and raise your own custom error, set the continueOnError="true" attribute on the policy root element. To learn more, see What you need to know about policy errors and Handling faults.

Errors returned from Edge policies follow a consistent format as described in the Error code reference.

Runtime errors

These errors can occur when the policy executes.

Error Code Message
ExecutionFailed Failed to execute the RegularExpressionProtection StepDefinition {0}. Reason: {1}
InstantiationFailed Failed to instantiate the RegularExpressionProtection StepDefinition {0}
NonMessageVariable Variable {0} does not resolve to a Message
SourceMessageNotAvailable {0} message is not available for RegularExpressionProtection StepDefinition {1}
ThreatDetected Regular Expression Threat Detected in {0}: regex: {1} input: {2}
VariableResolutionFailed Failed to resolve variable {0}

Deployment errors

Error Code Message Fix
CannotBeConvertedToNodeset RegularExpressionProtection {0}: Result of xpath {1} cannot be converted to nodeset. Context {2}
DuplicatePrefix RegularExpressionProtection {0}: Duplicate prefix {1}
EmptyJSONPathExpression RegularExpressionProtection {0}: Empty JSONPath expression
EmptyXPathExpression RegularExpressionProtection {0}: Empty XPath expression
InvalidRegularExpression RegularExpressionProtection {0}: Invalid Regular Expression {1}, Context {2}
JSONPathCompilationFailed RegularExpressionProtection {0}: Failed to compile jsonpath {1}. Context {2}
NONEmptyPrefixMappedToEmptyURI RegularExpressionProtection {0}: Non-empty prefix {1} cannot be mapped to empty uri
NoPatternsToEnforce RegularExpressionProtection {0}: No patterns to enforce in {1}
NothingToEnforce RegularExpressionProtection {0}: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory
XPathCompilationFailed RegularExpressionProtection {0}: Failed to compile xpath {1}. Context {2}

Fault variables

These variables are set when this policy triggers an error. 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 table above. fault.name Matches "ThreatDetected"
regularexpressionprotection.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. regularexpressionprotection.Regular-Expressions-Protection-1.failed = true

Schemas

Weitere Informationen

JSON Threat Protection-Richtlinie

XML-Richtlinie zum Schutz vor Bedrohungen