Zasada JSONThreatProtection

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 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 <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.
steps.jsonthreatprotection.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.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

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.

Powiązane artykuły

Zasady JSONtoXML

Zasada XMLThreatProtection

Zasada RegularExpressionProtection