Zasada XMLThreatProtection

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Co

Usuń luki w zabezpieczeniach kodu XML i zminimalizuj liczbę ataków na swój interfejs API. Opcjonalnie wykrywaj ataki ładunków XML na podstawie skonfigurowanych limitów. Chroń je przed zagrożeniami XML, stosując następujące metody:

  • Weryfikuj wiadomości przy użyciu schematu XML (.xsd)
  • Oceń treść wiadomości pod kątem określonych słów kluczowych lub wzorców, które chcesz wykluczyć
  • wykrywanie uszkodzonych lub zniekształconych wiadomości przed ich analizą,

Odwołanie do elementu

Dokumentacja elementów opisuje elementy i atrybuty zasady 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"> 

Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślne 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>, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw wartość false, aby zwracać błąd w przypadku niepowodzenia zasady. Jest to normalne działanie większości zasad.

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

false Opcjonalnie
enabled

Ustaw jako true, aby wymuszać zasadę.

Ustaw wartość false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie dołączona do procesu.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

false Wycofano

Element <DisplayName>

Użyj oprócz atrybutu name, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

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

Nie dotyczy

Jeśli pominiesz ten element, zostanie użyta wartość atrybutu name zasady.

Obecność Opcjonalnie
Typ Ciąg znaków

Element <NameLimits>

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

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

Element <NameLimits>/<Element>

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

Przeanalizujmy ten przykładowy 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 <Element> we fragmencie kodu zasady poniżej sprawdzi, czy nazwy elementów (book, title, author i year) 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ: Liczba całkowita

Element <NameLimits>/<Attribute>

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

Przeanalizujmy ten przykładowy 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> we fragmencie kodu zasady poniżej 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ: Liczba całkowita

Element <NameLimits>/<NamespacePrefix>

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

Przeanalizujmy ten przykładowy kod XML:

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

Podczas analizowania powyższego kodu XML wartość elementu <NamespacePrefix> we fragmencie kodu zasady poniżej 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ: Liczba całkowita

Element <NameLimits>/<ProcessingInstructionTarget>

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

Przeanalizujmy ten przykładowy kod XML:

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

Podczas analizowania powyższego kodu XML wartość elementu <ProcessingInstructionTarget> we fragmencie zasad poniżej będzie sprawdzać, czy 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ: Liczba całkowita

Element <Source>

Wiadomość do sprawdzenia pod kątem ataków z użyciem ładunku XML. Najczęściej jest ustawiona wartość request, ponieważ zazwyczaj trzeba weryfikować żądania przychodzące z aplikacji klienckich. Gdy ma on wartość message, ten element automatycznie ocenia wiadomość żądania, gdy jest dołączona do przepływu żądania, oraz wiadomość z odpowiedzią po dołączeniu do przepływu odpowiedzi.

<Source>request</Source>
Domyślnie: Poproś
Obecność: Opcjonalnie
Typ:

Ciąg tekstowy.

Wybierz z listy request, response lub message.

Element <StructuralLimits>

Określa ograniczenia 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ść: Opcjonalnie
Typ: Nie dotyczy

Element <StructuralLimits>/<NodeDepth>

Określa maksymalną głębokość węzłów 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ:

Liczba całkowita

Element <StructuralLimits>/<AttributeCountPerElement>

Określa maksymalną liczbę atrybutów dozwoloną dla dowolnego elementu.

Przeanalizujmy ten przykładowy 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 pozwoli sprawdzić, czy elementy book, title, author i year mają maksymalnie 2 atrybutów. Atrybuty używane do definiowania przestrzeni nazw nie są wliczane.
<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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ:

Liczba całkowita

<StructuralLimits>/<NameSpaceCountPerElement> – element

Określa maksymalną liczbę definicji przestrzeni nazw dozwoloną dla dowolnego elementu.

Przeanalizujmy ten przykładowy 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> we fragmencie zasad poniżej pozwoli sprawdzić, czy elementy e1 i e2 mają maksymalnie 2 definicji przestrzeni nazw. W tym przypadku <e1> ma 0 definicji przestrzeni nazw, a <e2> ma 2 definicje przestrzeni nazw: xmlns="http://apigee.com" i 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ:

Liczba całkowita

Element <StructuralLimits>/<ChildCount>

Określa maksymalną liczbę elementów podrzędnych dozwolonych dla 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ:

Liczba całkowita

Atrybuty

Atrybut Domyślne Obecność
includeComment prawda Opcjonalnie
includeElement prawda Opcjonalnie
includeProcessingInstructions prawda Opcjonalnie
includeText prawda Opcjonalnie

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ść: Opcjonalnie
Typ:

Nie dotyczy

Element <ValueLimits>/<Text>

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

Przeanalizujmy ten przykładowy 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> we fragmencie zasad poniżej pozwoli 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ:

Liczba całkowita

Element <ValueLimits>/<Attribute>

Określa limit znaków dla dowolnych wartości atrybutów występujących w dokumencie XML.

Przeanalizujmy ten przykładowy 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> we fragmencie kodu zasady poniżej 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
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.

Przeanalizujmy ten przykładowy kod XML:

<ns1:myelem xmlns:ns1="http://ns1.com"/>
Podczas analizowania powyższego kodu XML wartość elementu <NamespaceURI> we fragmencie kodu zasady poniżej umożliwi sprawdzenie, 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ:

Liczba całkowita

Element <ValueLimits>/<Comment>

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

Przeanalizujmy ten przykładowy 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> we fragmencie kodu zasady poniżej 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ:

Liczba całkowita

Element <ValueLimits>/<ProcessingInstructionData>

Określa limit znaków dla tekstu instrukcji przetwarzania występującego w dokumencie XML.

Przeanalizujmy ten przykładowy kod XML:

<?xml-stylesheet type="text/xsl" href="style.xsl"?>
Podczas analizowania powyższego kodu XML wartość elementu <ProcessingInstructionData> we fragmencie zasad poniżej będzie sprawdzać, 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 domyślną wartość -1, która oznacza brak limitu.
Obecność: Opcjonalnie
Typ:

Liczba całkowita

Informacje o błędach

W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.

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 w zasadzie progu. Do tych typów błędów należą: 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 działania zasad XMLThreatProtection.
steps.xmlthreatprotection.InvalidXMLPayload 500 Ten błąd występuje, jeśli ładunek wiadomości wejściowej określony przez element <Source> zasady XMLThreatProtection nie jest prawidłowym dokumentem XML.
steps.xmlthreatprotection.SourceUnavailable 500 Ten błąd występuje, jeśli zmienna message określona w elemencie <Source> ma jedną z tych wartości:
  • Poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada)
  • 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 nie jest typu message.

Uwagi:

  • Nazwa błędu „ExecutionFailed” jest domyślną nazwą błędu, która jest zwracana niezależnie od typu wykrytego błędu. Wartość domyślną można jednak zmienić, ustawiając właściwość na poziomie organizacji. Po ustawieniu tej właściwości nazwa błędu będzie odzwierciedlać rzeczywisty błąd. Na przykład „TextExceeded” lub „AttrValueExceeded”. Szczegóły znajdziesz w uwagach dotyczących użytkowania.
  • Domyślny stan HTTP 500. W przypadku błędów przepływu żądań można go jednak zmienić na 400, ustawiając właściwość na poziomie organizacji. Szczegóły znajdziesz w uwagach dotyczących użytkowania.

Błędy wdrażania

Brak.

Zmienne błędów

Te zmienne są ustawiane, gdy wystąpi błąd środowiska wykonawczego. Więcej informacji znajdziesz w artykule Co musisz wiedzieć 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 środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. 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 odbierający dane online jest celem ataku, zarówno złośliwy, jak i niezamierzony. Niektóre ataki wykorzystują elastyczność kodu XML, tworząc nieprawidłowe dokumenty, które mogą stanowić zagrożenie dla systemów backendu. Uszkodzone lub bardzo złożone dokumenty XML mogą powodować przydzielenie przez serwery większej ilości pamięci, niż jest dostępna, zużywanie zasobów procesora i pamięci, awarie parserów, a także wyłączenie przetwarzania wiadomości i tworzenie ataków typu DoS na poziomie aplikacji.

Konfiguracja błędu ochrony przed zagrożeniami

Ważne informacje, jeśli tworzysz reguły FaultRule dla tej zasady: domyślnie Edge zwraca kod stanu HTTP 500 – wewnętrzny błąd serwera i kod błędu ExecutionFailed, jeśli komunikat nie przekracza zasady ochrony przed zagrożeniami w formacie JSON lub XML. Możesz zmienić działanie tego błędu za pomocą nowej usługi na poziomie organizacji. Gdy ustawisz właściwość organizacji features.isPolicyHttpStatusEnabled na wartość „true” (prawda), zachodzi te działania:

  • Żądanie: jeśli do przepływu żądań jest dołączona zasada ochrony przed zagrożeniami, nieprawidłowe wiadomości zwracają kod stanu „400 Bad Request” (Kod stanu „400 Bad Request)” i odpowiedni kod błędu zasady (a nie tylko ExecutionFailed).
  • Odpowiedź: gdy do przepływu odpowiedzi są dołączone zasady ochrony przed zagrożeniami, nieprawidłowe wiadomości nadal zwracają kod stanu 500 – wewnętrzny błąd serwera i jeden z odpowiednich kodów błędów zasad (a nie tylko błąd ExecutionFailed).

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

Powiązane artykuły

Zasada ochrony przed zagrożeniami JSON

Zasada ochrony wyrażeń regularnych