Zasada XMLThreatProtection

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

Co

Rozwiązuj problemy z lukami w zabezpieczeniach XML i minimalizuj ataki na interfejs API. Opcjonalnie możesz wykrywać ataki na ładunek XML na podstawie skonfigurowanych limitów. Chroń się przed zagrożeniami związanymi z XML, stosując te metody:

.
  • Weryfikowanie wiadomości na podstawie schematu XML (.xsd)
  • oceniać treść wiadomości pod kątem określonych słów kluczowych lub wzorców, które mają zostać wykluczone;
  • wykrywać uszkodzone lub nieprawidłowo sformatowane wiadomości przed ich przeanalizowaniem;

Odwołanie do elementu

Opis elementu zawiera informacje o elementach i atrybutach zasad 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>

Atrybuty <XMLThreatProtection>

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

W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślny Obecność
name

Wewnętrzna nazwa zasady. Wartość atrybutu name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekracza 255 znaków.

Opcjonalnie możesz użyć elementu <DisplayName> do oznaczenia zasady jako edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw jako false, aby w przypadku niepowodzenia zasady zwracany był błąd. To normalne w przypadku większości zasad.

Ustaw jako true, aby wykonywanie przepływu było kontynuowane nawet po zastosowaniu zasady niepowodzenie.

fałsz Opcjonalnie
enabled

Aby egzekwować zasadę, ustaw wartość true.

Aby wyłączyć zasadę, ustaw wartość false. Te zasady nie będą jest wymuszane nawet wtedy, gdy jest ono połączone z przepływem.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

fałsz Wycofano

&lt;DisplayName&gt; element

Używaj oprócz atrybutu name do oznaczania zasady w edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

<DisplayName>Policy Display Name</DisplayName>
Domyślny

Nie dotyczy

Jeśli pominiesz ten element, atrybut name zasady otrzyma wartość .

Obecność Opcjonalnie
Typ Ciąg znaków

Element <NameLimits>

Określa limity znaków, które mają być sprawdzane i wymuszane przez zasadę.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>     
</NameLimits>
Domyślnie: Nie dotyczy
Obecność: Opcjonalny
Typ: Nie dotyczy

Element <NameLimits>/<Element>

Określa limit maksymalnej liczby znaków dozwolonych w nazwie elementu w dokumencie XML.

Rozważmy na przykład ten kod XML:

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

Podczas analizy powyższego kodu XML wartość elementu <Element> w poniższym fragmencie kodu zasad potwierdzi, że nazwy elementów (book, title, authoryear)) nie przekraczają 10 znaków.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>     
</NameLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ: Liczba całkowita

Element <NameLimits>/<Attribute>

Określa limit maksymalnej liczby znaków dozwolonych w nazwie atrybutu w dokumencie XML.

Rozważmy na przykład ten kod XML:

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

Podczas analizowania powyższego kodu XML wartość elementu <Attribute> w poniższym fragmencie kodu zasad sprawdzi, czy nazwa atrybutu category nie przekracza 10 znaków.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>     
</NameLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ: Liczba całkowita

Element <NameLimits>/<NamespacePrefix>

Określa limit maksymalnej liczby znaków dozwolonych w prefiksie przestrzeni nazw w dokumencie XML.

Rozważmy na przykład ten kod XML:

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

Podczas analizowania powyższego kodu XML wartość elementu <NamespacePrefix> w poniższym fragmencie zasad sprawdzi, czy prefiks przestrzeni nazw ns1 nie przekracza 10 znaków.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>     
</NameLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ: Liczba całkowita

Element <NameLimits>/<ProcessingInstructionTarget>

Określa limit maksymalnej liczby znaków dozwolonych w celu dowolnych instrukcji przetwarzania w dokumencie XML.

Rozważmy na przykład ten kod XML:

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

Podczas analizowania powyższego kodu XML wartość elementu <ProcessingInstructionTarget> w poniższym fragmencie zasad potwierdzi, że cel instrukcji przetwarzania xml-stylesheet nie przekracza 10 znaków.

<NameLimits>
   <Element>10</Element>
   <Attribute>10</Attribute>
   <NamespacePrefix>10</NamespacePrefix>
   <ProcessingInstructionTarget>10</ProcessingInstructionTarget>     
</NameLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ: Liczba całkowita

Element <Source>

Wiadomość, która ma zostać przeskanowana pod kątem ataków z użyciem ładunku XML. Najczęściej ustawia się wartość request, ponieważ zwykle trzeba weryfikować przychodzące żądania z aplikacji klienckich. Gdy ten element jest ustawiony na message, automatycznie ocenia wiadomość z żądaniem, gdy jest dołączony do przepływu żądania, oraz wiadomość z odpowiedzią, gdy jest dołączony do przepływu odpowiedzi.

<Source>request</Source>
Domyślnie: żądanie
Obecność: Opcjonalny
Typ:

Ciąg tekstowy.

Wybierz request, response lub message.

Element <StructuralLimits>

Określa limity strukturalne, które mają być sprawdzane i egzekwowane przez zasadę.

<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Domyślnie: Nie dotyczy
Obecność: Opcjonalny
Typ: Nie dotyczy

Element <StructuralLimits>/<NodeDepth>

Określa maksymalną głębokość węzła dozwoloną w pliku XML.

<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ:

Liczba całkowita

Element <StructuralLimits>/<AttributeCountPerElement>

Określa maksymalną liczbę atrybutów dozwolonych w przypadku dowolnego elementu.

Rozważmy na przykład ten kod XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
 Podczas analizowania powyższego kodu XML wartość elementu <AttributeCountPerElement> we fragmencie zasad poniżej potwierdzi, że elementy book, title, authoryear nie mają więcej niż 2 atrybutów. Pamiętaj, że atrybuty używane do definiowania przestrzeni nazw nie są uwzględniane.
<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ:

Liczba całkowita

Element <StructuralLimits>/<NameSpaceCountPerElement>

Określa maksymalną liczbę definicji przestrzeni nazw dozwolonych w przypadku dowolnego elementu.

Rozważmy na przykład ten kod XML:

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

Podczas analizowania powyższego kodu XML wartość elementu <NamespaceCountPerElement> w poniższym fragmencie zasad sprawdzi, czy elementy e1 i e2 nie mają więcej niż 2 definicji przestrzeni nazw. W tym przypadku element <e1> ma 0 definicji przestrzeni nazw, a element <e2> ma 2 definicje przestrzeni nazw: 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>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ:

Liczba całkowita

Element <StructuralLimits>/<ChildCount>

Określa maksymalną liczbę elementów podrzędnych dozwolonych w przypadku dowolnego elementu.

<StructureLimits>
   <NodeDepth>5</NodeDepth>
   <AttributeCountPerElement>2</AttributeCountPerElement>
   <NamespaceCountPerElement>3</NamespaceCountPerElement>
   <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount>
</StructureLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ:

Liczba całkowita

Atrybuty

Atrybut Domyślny Obecność
includeComment prawda Opcjonalny
includeElement prawda Opcjonalny
includeProcessingInstructions prawda Opcjonalny
includeText prawda Opcjonalny

Element <ValueLimits>

Określa limity znaków dla wartości, które mają być sprawdzane i egzekwowane przez zasadę.

<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Domyślnie: Nie dotyczy
Obecność: Opcjonalny
Typ:

Nie dotyczy

Element <ValueLimits>/<Text>

Określa limit znaków dla wszystkich węzłów tekstowych w dokumencie XML.

Rozważmy na przykład ten kod XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
 Podczas analizowania powyższego kodu XML wartość elementu <Text> w poniższym fragmencie zasad sprawdzi, czy wartości tekstowe elementów Learning XML, Erik T. Ray, i 2003 nie przekraczają 15 znaków.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ:

Liczba całkowita

Element <ValueLimits>/<Attribute>

Określa limit znaków dla wszystkich wartości atrybutów w dokumencie XML.

Rozważmy na przykład ten kod XML:

<book category="WEB">
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
 Podczas analizowania powyższego kodu XML wartość elementu <Attribute> w poniższym fragmencie zasad sprawdzi, czy wartość atrybutu WEB nie przekracza 10 znaków.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ:

Liczba całkowita

Element <ValueLimits>/<NamespaceURI>

Określa limit znaków dla wszystkich identyfikatorów URI przestrzeni nazw występujących w dokumencie XML.

Rozważmy na przykład ten kod XML:

<ns1:myelem xmlns:ns1="http://ns1.com"/>
 Podczas analizowania powyższego kodu XML wartość elementu <NamespaceURI> w poniższym fragmencie zasad sprawdzi, czy wartość identyfikatora URI przestrzeni nazw http://ns1.com nie przekracza 10 znaków.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ:

Liczba całkowita

Element <ValueLimits>/<Comment>

Określa limit znaków dla komentarzy w dokumencie XML.

Rozważmy na przykład ten kod XML:

<book category="WEB">
   <!-- This is a comment -->
   <title>Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
</book>
 Podczas analizowania powyższego kodu XML wartość elementu <Comment> w poniższym fragmencie zasad sprawdzi, czy tekst komentarza This is a comment nie przekracza 10 znaków.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ:

Liczba całkowita

Element <ValueLimits>/<ProcessingInstructionData>

Określa limit znaków dla tekstu instrukcji przetwarzania w dokumencie XML.

Rozważmy na przykład ten kod XML:

<?xml-stylesheet type="text/xsl" href="style.xsl"?>
 Podczas analizowania powyższego kodu XML wartość elementu <ProcessingInstructionData> w poniższym fragmencie zasad sprawdzi, czy tekst instrukcji przetwarzania type="text/xsl" href="style.xsl" nie przekracza 10 znaków.
<ValueLimits>
   <Text>15</Text>
   <Attribute>10</Attribute>
   <NamespaceURI>10</NamespaceURI>
   <Comment>10</Comment>
   <ProcessingInstructionData>10</ProcessingInstructionData>
</ValueLimits>
Domyślnie: Jeśli nie określisz limitu, system zastosuje wartość domyślną -1, która oznacza brak limitu.
Obecność: Opcjonalny
Typ:

Liczba całkowita

Odwołanie do błędu

.

W tej sekcji opisano kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wyzwala błąd. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami i postępowaniu z błędami

Błędy w czasie wykonywania

Te błędy mogą wystąpić podczas wykonywania zasady.

Kod błędu Stan HTTP Przyczyna Napraw
steps.xmlthreatprotection.ExecutionFailed 500 Zasada XMLThreatProtection może zgłaszać wiele różnych typów błędów ExecutionFailed. Większość z tych błędów występuje po przekroczeniu określonego progu ustawionego w zasadzie. Te typy błędów to między innymi: długość nazwy elementu, liczba elementów podrzędnych, głębokość węzła, liczba atrybutów, długość nazwy atrybutu, i wiele innych. Pełną listę znajdziesz w temacie Rozwiązywanie problemów z błędami w czasie działania zasady XMLThreatProtection.
steps.xmlthreatprotection.InvalidXMLPayload 500 Ten błąd występuje, jeśli wejściowy ładunek komunikatu określony przez element <Source> zasady XMLThreatProtection nie jest prawidłowym dokumentem XML.
steps.xmlthreatprotection.SourceUnavailable 500 Ten błąd występuje, jeśli komunikat określona w elemencie <Source> to:
    .
  • Poza zakresem (niedostępne w konkretnym procesie, w którym są realizowane zasady)
  • Nie jest jedną z prawidłowych wartości request, response, lub message
steps.xmlthreatprotection.NonMessageVariable 500 Ten błąd występuje, jeśli element <Source> jest ustawiony na zmienną, która jest innego typu wiadomość.

Uwagi:

  • Nazwa błędu ExecutionFailed to domyślna nazwa błędu i będzie zwracana niezależnie od tego, typ wykrytego błędu; ale można je zmienić, ustawiając usłudze na poziomie organizacji. Jeśli określisz tę właściwość, nazwa błędu będzie odzwierciedlać . Na przykład „TextExceeded” lub „AttrValueExceeded”. Zobacz informacje o korzystaniu z .
  • Domyślnym stanem jest HTTP 500. ale stan HTTP można zmienić na 400 przez błędy w przepływie żądania przez ustawienie usługi na poziomie organizacji. Zobacz informacje o korzystaniu z .

Błędy wdrażania

Brak.

Zmienne błędów

Te zmienne są ustawiane po wystąpieniu błędu działania. Więcej informacji znajdziesz w artykule Podstawowe informacje o błędach związanych z naruszeniem zasad.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu podana w tabeli Błędy czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. fault.name Matches "SourceUnavailable"
xmlattack.policy_name.failed policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. xmlattack.XPT-SecureRequest.failed = true

Przykładowa odpowiedź na błąd

{
  "fault": {
    "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2",
    "detail": {
      "errorcode": "steps.xmlthreatprotection.ExecutionFailed"
    }
  }
}

Przykładowa reguła błędu

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

Schematy

Zastosowanie

Każdy serwer, który otrzymuje dane online, jest narażony na atak, niezależnie od tego, czy jest on złośliwy, czy niezamierzony. Niektóre ataki wykorzystują elastyczność XML, tworząc nieprawidłowe dokumenty, które mogą naruszyć bezpieczeństwo systemów backendowych. Uszkodzone lub bardzo złożone dokumenty XML mogą powodować, że serwery przydzielają więcej pamięci niż jest dostępna, co wiąże zasoby procesora i pamięci, powoduje awarie parserów i ogólnie uniemożliwia przetwarzanie wiadomości oraz tworzy ataki typu odmowa usługi na poziomie aplikacji.

Błąd konfiguracji zabezpieczenia przed zagrożeniami

Ważne informacje, jeśli tworzysz reguły FaultRules dla tych zasad: domyślnie Edge zwraca kod stanu HTTP 500 Internal Server Error i kod błędu ExecutionFailed, jeśli komunikat nie przejdzie przez zasady ochrony przed zagrożeniami JSON lub XML. Możesz zmienić to zachowanie w przypadku błędów za pomocą nowej usługi na poziomie organizacji. Gdy ustawisz wartość właściwości organizacji features.isPolicyHttpStatusEnabled na true, nastąpi to zachowanie:

  • Żądanie: w przypadku dowolnego przepływu żądań, do którego dołączona jest zasada ochrony przed zagrożeniami, nieprawidłowe wiadomości zwracają kod stanu 400 Nieprawidłowe żądanie wraz z odpowiednim kodem błędu zasady (zamiast tylko ExecutionFailed).
  • Odpowiedź: jeśli do dowolnego przepływu odpowiedzi jest dołączona zasada ochrony przed zagrożeniami, nieprawidłowe wiadomości nadal zwracają kod stanu 500 Internal Server Error i jeden z odpowiednich kodów błędu zasady (a nie tylko ExecutionFailed).

Klienci Cloud muszą skontaktować się z zespołem pomocy Apigee Edge, aby ustawić właściwość organizacji.

Powiązane artykuły

Zasady ochrony przed zagrożeniami JSON

Zasady ochrony wyrażeń regularnych