Zasada JSONThreatProtection

Oglądasz dokumentację Apigee Edge.
Wyświetl dokumentację Apigee X.

Co

Minimalizuje ryzyko związane z atakami na poziomie treści, umożliwiając określanie ograniczeń dla różnych struktur JSON, takich jak tablice i ciągi.

Film: Obejrzyj krótki film, aby dowiedzieć się więcej o tym, jak zasada JSONThreatProtection umożliwia ochronę interfejsów API przed atakami na poziomie treści.

Film: Obejrzyj ten krótki film na platformie Apigee Cross-Cloud API.

Dokumentacja elementu

Odwołanie do elementu 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 opisuje atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślnie 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 użyj elementu <DisplayName>, aby oznaczyć zasadę w edytorze proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagany
continueOnError

Ustaw wartość false, aby wyświetlać błąd, gdy zasada nie działa. To prawidłowy proces w przypadku większości zasad.

Ustaw wartość true, aby kontynuować wykonywanie przepływu nawet po naruszeniu zasady.

fałsz Opcjonalnie
enabled

Ustaw jako true, aby egzekwować zasadę.

Ustaw zasadę false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie powiązana z przepływem.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

fałsz Wycofano

Element <DisplayName>

Używaj atrybutu name tak, aby oznaczyć zasadę w edytorze proxy interfejsu zarządzania inną nazwą w języku naturalnym.

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

Nie dotyczy

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

Obecność Opcjonalnie
Typ Ciąg znaków

Element <ArrayElementCount>

Określa maksymalną liczbę elementów dozwolonych w tablicy.

<ArrayElementCount>20</ArrayElementCount>
Domyślne: Jeśli nie określisz tego elementu lub określisz ujemną liczbę całkowitą, system nie będzie egzekwować limitu.
Obecność: Opcjonalnie
Typ: Liczba całkowita

Element <ContainerDepth>

Określa maksymalną dozwoloną głębokość izolacji, w której kontenery są obiektami lub tablicami. Na przykład tablica z obiektem zawierającym obiekt spowodowałaby 3 głębokości w kontenerze.

<ContainerDepth>10</ContainerDepth>
Domyślne: Jeśli nie określisz tego elementu lub podasz ujemną liczbę całkowitą, system nie będzie egzekwować limitu.
Obecność: Opcjonalnie
Typ: Liczba całkowita

Element <ObjectEntryCount>

Określa maksymalną dozwoloną liczbę wpisów w obiekcie.

<ObjectEntryCount>15</ObjectEntryCount>
Domyślne: Jeśli nie określisz tego elementu lub podasz ujemną liczbę całkowitą, system nie będzie egzekwować limitu.
Obecność: Opcjonalnie
Typ: Liczba całkowita

Element <ObjectEntryNameLength>

Określa maksymalną długość ciągu znaków w nazwie właściwości podanej w obiekcie.

<ObjectEntryNameLength>50</ObjectEntryNameLength>
Domyślne: Jeśli nie określisz tego elementu lub określisz ujemną liczbę całkowitą, system nie będzie egzekwować limitu.
Obecność: Opcjonalnie
Typ: Liczba całkowita

Element <Source>

Wiadomość do sprawdzenia pod kątem ataków ładunku JSON. Zwykle jest to request, ponieważ zwykle trzeba weryfikować żądania przychodzące z aplikacji klienckich. Gdy ustawiona jest wartość message, ten element automatycznie ocenia komunikat z żądaniem, gdy jest dołączony do przepływu żądania, oraz wiadomość z odpowiedzią po dołączeniu do przepływu odpowiedzi.

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

Ciąg tekstowy.

Prawidłowe wartości: request, response lub message.

Element <StringValueLength>

Określa maksymalną dozwoloną wartość wartości ciągu.

<StringValueLength>500</StringValueLength>
Domyślne: Jeśli nie określisz tego elementu lub określisz ujemną liczbę całkowitą, system nie będzie egzekwować limitu.
Obecność: Opcjonalnie
Typ: Liczba całkowita

Dokumentacja błędu

W tej sekcji opisano kody błędów i komunikaty o błędach, które są zwracane, a także wartości zmiennych ustawionych przez Edge w momencie aktywowania tej zasady. Ta informacja jest ważna, gdy opracowujesz reguły obsługi błędów. Więcej informacji znajdziesz w artykułach Co musisz wiedzieć o błędach zasad i Obsługa 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 zwracać wiele różnych typów błędów ExecutionFailed. Większość tych błędów występuje, gdy przekroczysz określony próg określony w zasadach. Te typy błędów to: liczba wpisów nazwy obiektu, liczba wpisów obiektów, liczba elementów tablicy, głębokość kontenera, długość wartości ciągu znaków. Ten błąd występuje również wtedy, gdy ładunek zawiera nieprawidłowy obiekt JSON.
steps.jsonthreatprotection.SourceUnavailable 500 Ten błąd występuje wtedy, gdy zmienna message określona w elemencie <Source> jest:
  • Poza zakresem (opcja niedostępna w konkretnym przepływie, w którym jest wykonywana zasada)
  • Nie jest prawidłową wartością request, response lub message
steps.jsonthreatprotection.NonMessageVariable 500 Ten błąd występuje, jeśli element <Source> jest ustawiony na zmienną, która nie jest typu message.

Błędy wdrażania

Brak.

Zmienne błędów

Zmienne te są ustawiane, gdy zasada powoduje błąd. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach zasad.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu, zgodnie z tabelą Błędy środowiska wykonawczego. Nazwa błędu jest ostatnią częścią kodu błędu. 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 awarii

<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 usługi oparte na języku XML, interfejsy API obsługujące zapis obiektów JavaScript (JSON) mogą być podatne na ataki na poziomie treści. Proste ataki JSON próbują używać struktur, które blokują parsery JSON, aby przeprowadzać awarie usługi i wywoływać ataki typu „odmowa usługi” na poziomie aplikacji. Wszystkie ustawienia są opcjonalne i zoptymalizowane pod kątem optymalizacji pod kątem potencjalnych luk w zabezpieczeniach.

Powiązane artykuły

Zasady JSONtoXML

Zasada XMLThreatProtection

Zasada ExpressExpression