Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Co
Zmniejsza ryzyko związane z atakami na poziomie treści, ponieważ umożliwia określenie limitów dotyczących różnych struktur JSON, takich jak tablice i ciągi znaków.
Film: obejrzyj krótki film, aby dowiedzieć się więcej o tym, jak zasada JSONThreatProtection umożliwia zabezpieczanie interfejsów API przed atakami na poziomie treści.
Film: obejrzyj ten krótki film dotyczący platform Apigee do obsługi wielochmurowych interfejsów API.
Odwołanie do elementu
Dokumentacja elementów opisuje elementy i atrybuty zasady JSONThreatProtection.
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1"> <DisplayName>JSONThreatProtection 1</DisplayName> <ArrayElementCount>20</ArrayElementCount> <ContainerDepth>10</ContainerDepth> <ObjectEntryCount>15</ObjectEntryCount> <ObjectEntryNameLength>50</ObjectEntryNameLength> <Source>request</Source> <StringValueLength>500</StringValueLength> </JSONThreatProtection>
Atrybuty <JSONThreatProtection>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-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 <TrackElementCount>
Określa maksymalną liczbę elementów dozwolonych w tablicy.
<ArrayElementCount>20</ArrayElementCount>
Domyślnie: | Jeśli nie określisz tego elementu lub podasz ujemną liczbę całkowitą, system nie wymusza limitu. |
Obecność: | Opcjonalnie |
Typ: | Liczba całkowita |
Element <ContainerDepth>
Określa maksymalną dopuszczalną głębokość izolacji, gdzie kontenery są obiektami lub tablicami. Na przykład tablica zawierająca obiekt zawierający obiekt ograniczyłaby głębokość izolacji do 3.
<ContainerDepth>10</ContainerDepth>
Domyślnie: | Jeśli nie określisz tego elementu lub podasz ujemną liczbę całkowitą, system nie będzie wymuszać żadnych ograniczeń. |
Obecność: | Opcjonalnie |
Typ: | Liczba całkowita |
Element <ObjectEntryCount>
Określa maksymalną liczbę wpisów dozwolonych w obiekcie.
<ObjectEntryCount>15</ObjectEntryCount>
Domyślnie: | Jeśli nie określisz tego elementu lub podasz ujemną liczbę całkowitą, system nie będzie wymuszać żadnych ograniczeń. |
Obecność: | Opcjonalnie |
Typ: | Liczba całkowita |
Element <ObjectEntryNameLength>
Określa maksymalną długość ciągu znaków dozwoloną dla nazwy właściwości w obiekcie.
<ObjectEntryNameLength>50</ObjectEntryNameLength>
Domyślnie: | Jeśli nie określisz tego elementu lub podasz ujemną liczbę całkowitą, system nie wymusza limitu. |
Obecność: | Opcjonalnie |
Typ: | Liczba całkowita |
Element <Source>
Wiadomość do sprawdzenia pod kątem ataków ładunków JSON. 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. Prawidłowe wartości: żądanie, odpowiedź lub komunikat. |
Element <StringValueLength>
Określa maksymalną długość ciągu znaków.
<StringValueLength>500</StringValueLength>
Domyślnie: | Jeśli nie określisz tego elementu lub podasz ujemną liczbę całkowitą, system nie wymusza 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.jsonthreatprotection.ExecutionFailed |
500 | Zasada JSONThreatProtection 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. Te typy błędów to m.in.: długość nazwy wpisu obiektu, liczba wpisów obiektu, liczba elementów tablicy, głębokość kontenera, długość wartości ciągu znaków. Ten błąd występuje też wtedy, gdy ładunek zawiera nieprawidłowy obiekt JSON. | build |
steps.jsonthreatprotection.SourceUnavailable |
500 |
Ten błąd występuje, jeśli zmienna message określona w elemencie <Source> ma jedną z tych wartości:
|
build |
steps.jsonthreatprotection.NonMessageVariable |
500 |
Ten błąd występuje, jeśli element <Source> jest ustawiony na zmienną, która nie jest typu message.
|
build |
Błędy wdrażania
Brak.
Zmienne błędów
Te zmienne są ustawiane, gdy zasada wywołuje błąd. 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" |
jsonattack.policy_name.failed |
policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. | jsonattack.JTP-SecureRequest.failed = true |
Przykładowa odpowiedź na błąd
{ "fault": { "faultstring": "JSONThreatProtection[JPT-SecureRequest]: Execution failed. reason: JSONThreatProtection[JTP-SecureRequest]: Exceeded object entry name length at line 2", "detail": { "errorcode": "steps.jsonthreatprotection.ExecutionFailed" } } }
Przykładowa reguła błędu
<FaultRule name="JSONThreatProtection Policy Faults">
<Step>
<Name>AM-CustomErrorResponse</Name>
<Condition>(fault.name Matches "ExecutionFailed") </Condition>
</Step>
<Condition>(jsonattack.JPT-SecureRequest.failed = true) </Condition>
</FaultRule>
Schematy
Zastosowanie
Podobnie jak w przypadku usług opartych na języku XML, interfejsy API obsługujące notację obiektów w języku JavaScript (JSON) są podatne na ataki na poziomie treści. Proste ataki JSON próbują wykorzystać struktury, które nadmiernie przejmują parsery JSON w celu awarii usługi i wywołania ataków typu DoS na poziomie aplikacji. Wszystkie ustawienia są opcjonalne i należy je dostosować, aby zoptymalizować wymagania usługi pod kątem potencjalnych luk w zabezpieczeniach.