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 Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw wartość Ustaw jako |
false | Opcjonalnie |
enabled |
Ustaw jako Ustaw wartość |
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 |
---|---|
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 |
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. | build |
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.
|
build |
steps.xmlthreatprotection.SourceUnavailable |
500 |
Ten błąd występuje, jeśli zmienna message określona w elemencie <Source> ma jedną z tych wartości:
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 |
Ten błąd występuje, jeśli element <Source> jest ustawiony na zmienną, która nie jest typu message.
|
build |
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.