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 Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako Ustaw jako |
fałsz | Opcjonalnie |
enabled |
Aby egzekwować zasadę, ustaw wartość Aby wyłączyć zasadę, ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
<DisplayName> 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 |
|---|---|
| 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, 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 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 |
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>
<AttributeCountPerElement> we fragmencie zasad poniżej potwierdzi, że elementy book, title, author i year 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" 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 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>
<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>
<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"/>
<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>
<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"?>
<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. | build |
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.
|
build |
steps.xmlthreatprotection.SourceUnavailable |
500 |
Ten błąd występuje, jeśli komunikat
określona w elemencie <Source> to:
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 |
Ten błąd występuje, jeśli element <Source> jest ustawiony na zmienną, która
jest innego typu
wiadomość.
|
build |
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.