Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.

Co
Wyodrębnia informacje z wiadomości (na przykład Ścieżka URI, parametr zapytania, nagłówek, parametr formularza, zmiennej, XML Payload lub JSON Payload) i ocenia tę treść w porównaniu ze wstępnie zdefiniowanym zwykłym. wyrażeń. Jeśli określone wyrażenia regularne mają wartość prawda, wiadomość jest traktowana jako i zostanie odrzucone.
Filmy
Aby dowiedzieć się więcej o zasadach ochrony wyrażeń regularnych, obejrzyj poniższe filmy.
Wideo | Opis |
---|---|
Ochrona przed atakami typu wstrzykiwanie kodu SQL (New Edge) | Ochrona przed atakami typu wstrzykiwanie kodu SQL przy użyciu zasady ochrony wyrażeń regularnych w interfejsu nowej wersji Edge. |
Ochrona przed atakami typu wstrzykiwanie kodu SQL (Classic Edge) | Ochrona przed atakami typu wstrzykiwanie kodu SQL przy użyciu zasady ochrony wyrażeń regularnych w klasycznego interfejsu Edge. |
Przykłady
GitHub
Stosuje zabezpieczenia regularne przykład z GitHuba pokazuje, jak przechwytywać potencjalne ataki polegające na wstrzykiwaniu kodu SQL za pomocą parametru zapytania. Ten przykład pokazuje też dobrą praktykę ustawiania ogólnej wartości 400, aby hakerzy nie uzyskali z odpowiedzi przydatnych informacji.
JavaScript obejmuje ochronę przed atakami
<RegularExpressionProtection name="JsonPathRegExProtection"> <DisplayName>Regular Expression Protection 1</DisplayName> <Source>request</Source> <JSONPayload escapeSlashCharacter="true"> <JSONPath> <Expression>$</Expression> <Pattern><\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*> </Pattern> <Pattern>n\s*\\\\\s*slash</Pattern> <Pattern>n\s*\/\s*slash</Pattern> <Pattern>n\s*\\"\s*quotes</Pattern> <Pattern>n\s*\\b\s*space</Pattern> <Pattern>n\s*\\f\s*forwardfeed</Pattern> <Pattern>n\s*\\n\s*newline</Pattern> <Pattern>n\s*\\r\s*carria</Pattern> <Pattern>n\s*\\t\s*tab</Pattern> <Pattern>n\s*\\uFFFF\s*hex</Pattern> </JSONPath> </JSONPayload> </RegularExpressionProtection>
Przykład powyżej pokazuje, jak używać zasady RegularExpressionProtection do oceny
Ładunki JSON używane w języku JavaScript obejmują ataki. Konkretnie chodzi tu o treści wyodrębnione przez
<JSONPath>
/<Expression>
jest oceniany w oparciu o
wyrażenie regularne w formacie <JSONPath>
/<Pattern>
.
Jeśli wyrażenie regularne w parametrze
Kod <JSONPath>
/<Pattern>
zawiera znaki zarezerwowane dla formatu XML
(", &, ', < lub .), musisz go zakodować w formacie XML przed umieszczeniem go w pliku XML zasad
. W przykładzie powyżej wyrażenie regularne
Poprzednia wartość „<\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
” to
Zakodowany w formacie XML jako
<\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
Ponadto, jeśli wyrażenie regularne zawiera ukośniki (/), musisz użyć znaku zmiany znaczenia
je, ustawiając <JSONPayload>
escapeSlashCharacter
do wartości true
.
Dopasowanie bez rozróżniania wielkości liter
Częstym przypadkiem użycia jest dopasowywanie wielkości liter bez rozróżniania wielkości liter. Oto przykład,
możesz to zrobić w wyrażeniu regularnym z użyciem konstrukcji (?i)
. W tym
na przykład DELETE
, delete
i Delete
będą
wartość prawda.
<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>
Informacje o zasadach ochrony wyrażeń regularnych
Apigee Edge umożliwia konfigurowanie wyrażeń regularnych, których można używać oceniane na podstawie ruchu API w czasie działania w celu identyfikowania typowych zagrożeń na poziomie treści, które występują pewnych wzorców.
Wyrażenie regularne, w skrócie wyrażenie regularne, to zestaw ciągów znaków. określające wzorzec w ciągu znaków. Wyrażenia regularne umożliwiają automatyzację treści analizowanych pod kątem wzorców. Wyrażeń regularnych możesz użyć na przykład do oceny adresu e-mail. aby mieć pewność, że jest poprawnie zorganizowany. Więcej informacji znajdziesz w sekcji Zwykłe wyrażenia w samouczkach Java.
Najczęstszym zastosowaniem funkcji RegularExpressionProtection jest ocena kodu JSON i XML. pod kątem szkodliwych treści.
Żadne wyrażenie regularne nie może wyeliminować wszystkich ataków opartych na treści, a wiele mechanizmów powinien należy łączyć w celu włączenia obrony w głąb. W tej sekcji opisano kilka zalecanych wzorców wykluczając treści.
Przykładowe wykluczenie wzory
Wyrażenia regularne muszą być zakodowane w formacie XML w pliku konfiguracji zasady.
Nazwa | Wyrażenie regularne |
---|---|
Wstrzyknięcie kodu SQL |
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b)) |
Wstrzyknięcie kodu Uwzględnij po stronie serwera |
<!--#(include|exec|echo|config|printenv)\s+.* Zakodowany w formacie XML: <!--#(include|exec|echo|config|printenv)\s+.* |
Wstrzyknięcie skróconej składni XPath |
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+ |
Wstrzykiwanie rozszerzonej składni XPath |
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling)) |
Wstrzyknięcie kodu JavaScript |
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> Zakodowany w formacie XML: <\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> |
Wstrzykiwanie wyjątków Javy |
.*?Exception in thread.* |
Ustaw nagłówek Content-Type w żądaniu z ładunkiem XML lub JSON
Ładunek zasady ochrony wyrażeń regularnych może zawierać te elementy: elementy:
-
Element
<XMLPayload>
: określa, że należy wyodrębnić informacje ładunek XML i ocenić go w oparciu o podane wyrażenie regularne.Jeśli w zasadzie używasz atrybutu
<XMLPayload>
, NagłówekContent-Type
żądania musi być typem zawartości XML, takim jakapplication/xml
lubtext/xml
. -
Element
<JSONPayload>
: określa, że należy wyodrębnić informacje z ładunku JSON i ocenić za pomocą podanego wyrażenia regularnego.Jeśli w zasadzie używasz atrybutu
<JSONPayload>
, NagłówekContent-Type
żądania musi być typem treści JSON takim jakapplication/json
Zwykle projektujesz interfejs API w taki sposób, aby akceptował on format XML lub JSON. Istnieje jednak sytuacja,
w których interfejs API akceptuje oba te typy. Możesz następnie zdefiniować zasadę ochrony wyrażeń regularnych.
z elementami <XMLPayload>
i <JSONPayload>
.
Do konkretnego żądania na podstawie wartości atrybutu
Nagłówek Content-Type
.
Odwołanie do elementu
Odwołanie do elementu opisuje elementy i atrybuty elementu RegularExpressionProtection .
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1"> <DisplayName>Regular Expression Protection 1</DisplayName> <Source>response</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath> <QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam> <Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header> <FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam> <Variable name="request.content"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Variable> <XMLPayload> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces> <XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath> </XMLPayload> <JSONPayload> <JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath> </JSONPayload> </RegularExpressionProtection>
<RegularExpressionProtection> atrybuty
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-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 |
<Source> element
Wskazuje wiadomość, z której należy wyodrębnić informacje.
Jeśli element <Source>
zostanie pominięty, domyślną wartością jest
message
Na przykład: <Source>message</Source>
. Po ustawieniu na
message
, zasada używa wiadomości z żądaniem jako źródła po dołączeniu do żądania
przepływu danych. Podobnie zasada korzysta z odpowiedzi, gdy jest dołączona do procesu odpowiedzi.
Jeśli nie można znaleźć komunikatu źródłowego lub przechodzi on w typie innym niż wiadomość, zasada zwraca błąd.
<Source>response</Source>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Ciąg znaków |
<IgnoreUnresolvedVariables> element
Określa, czy zasada zwraca błąd po napotkaniu zmiennej, która jest nierozwiązalne.
Jeśli ma wartość false
(domyślna), zasada zwraca błąd w przypadku braku rozwiązania
. Jeśli ma wartość true
, nierozstrzygnięta zmienna jest traktowana jako pusta
ciąg znaków (wartość null).
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Domyślne: | fałsz |
Obecność: | Opcjonalnie |
Typ: | Wartość logiczna |
<URIPath> element
Określa, że informacje muszą zostać wyodrębnione ze ścieżki identyfikatora URI żądania i oceniane
z podanymi wyrażeniami regularnymi. Musisz podać co najmniej jeden
Element <Pattern>
określający wzorzec wyrażenia regularnego do dopasowania.
<URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Nie dotyczy |
<QueryParam> element
Określa, że informacje muszą zostać wyodrębnione z parametru zapytania żądania i
jest oceniana na podstawie podanych wyrażeń regularnych. Musisz podać co najmniej jeden
Element <Pattern>
określający wzorzec wyrażenia regularnego do dopasowania.
<QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
nazwa | Nazwa parametru zapytania żądania, z którego należy wyodrębnić informacje na podstawie podanych wyrażeń regularnych. | Nie dotyczy | Wymagane |
<Header> element
określa, że informacje muszą zostać wyodrębnione z nagłówków żądania i odpowiedzi oraz
jest oceniana na podstawie podanych wyrażeń regularnych. Musisz podać co najmniej jeden
Element <Pattern>
określający wzorzec wyrażenia regularnego do dopasowania.
<Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
nazwa |
Nazwa nagłówka żądania i odpowiedzi, z którego należy wyodrębnić informacje do oceny na podstawie podanych wyrażeń regularnych. |
Nie dotyczy | Wymagane |
<FormParam> element
Określa, że informacje muszą zostać wyodrębnione z parametru formularza żądania i oceniane
z podanymi wyrażeniami regularnymi. Musisz podać co najmniej jeden
Element <Pattern>
określający wzorzec wyrażenia regularnego do dopasowania.
<FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
nazwa |
Nazwa parametru formularza żądania, z którego należy wyodrębnić informacje na podstawie podanych wyrażeń regularnych. |
Nie dotyczy | Wymagane |
<Variable> element
Określa, że informacje muszą zostać wyodrębnione z danej zmiennej i oceniane w odniesieniu do z podanych wyrażeń regularnych.
<Variable name="request.content"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Variable>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
nazwa |
Nazwa zmiennej, z której należy wyodrębnić informacje na potrzeby oceny z podanymi wyrażeniami regularnymi. |
Nie dotyczy | Wymagane |
<XMLPayload> element
Określa, że informacje muszą zostać wyodrębnione z ładunku XML i oceniane w odniesieniu do wyrażenia regularne.
<XMLPayload> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces> <XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath> </XMLPayload>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Nie dotyczy |
<XMLPayload>/<Namespaces> element
Określa przestrzenie nazw, które mają być używane podczas oceny XPath.
<XMLPayload> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces> <XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath> </XMLPayload>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Ciąg znaków |
<XMLPayload>/<Namespaces>/<Namespace> element
Określa każdą przestrzeń nazw do używane do oceny XPath.<Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Ciąg znaków |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
prefiks |
Zawiera prefiks ułatwiający kwalifikowanie danej przestrzeni nazw. |
Nie dotyczy | Wymagane |
<XMLPayload>/<XPath> element
Określa ścieżkę XPath do oceny.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Nie dotyczy |
<XMLPayload>/<XPath>/<Expression> element
Określa wyrażenie XPath zdefiniowane dla zmiennej. Tylko wyrażenia XPath 1.0 są obsługiwane. Przykład:<Expression>/company/employee[@age>=$request.header.age]</Expression>
wyodrębnia informacje o pracownikach, których wiek jest równa wartości określonej w
request.header.age
<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Ciąg znaków |
<XMLPayload>/<XPath>/<Type> element
Określa typ danych.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Domyślne: | ciąg znaków |
Obecność: | Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: |
Ciąg tekstowy. Prawidłowe wartości to |
<XMLPayload>/<XPath>/<Pattern> element
Definiuje wzorzec wyrażenia regularnego. Jeśli wyrażenie regularne w argumencie
element<Pattern>
zawiera znaki zarezerwowane przez XML (", &, ', < lub
), musisz go zakodować w formacie XML przed dołączeniem.
<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Domyślne: | Nie dotyczy |
Obecność: | Wymagane |
Typ: | Ciąg znaków |
<JSONPayload> element
Określa, że informacje muszą zostać wyodrębnione z ładunku JSON i oceniane w odniesieniu do wyrażenia regularne.
<JSONPayload> <JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath> </JSONPayload>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Nie dotyczy |
Atrybuty
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
escapeSlashCharacter |
Ustaw jako |
prawda | Opcjonalnie |
<JSONPayload>/<JSONPath>/<Expression> element
Określa wyrażenie JSONPath zdefiniowane dla zmiennej.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Domyślne: | Nie dotyczy |
Obecność: | Opcjonalnie |
Typ: | Ciąg znaków |
<JSONPayload>/<JSONPath>/<Pattern> element
Definiuje wzorzec wyrażenia regularnego. Jeśli wyrażenie regularne w parametrze
Element <Pattern>
zawiera znaki zarezerwowane w formacie XML (", &, ', < lub .),
musisz go zakodować w formacie XML, zanim go umieścisz.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Domyślne: | Nie dotyczy |
Obecność: | Wymagane |
Typ: | Ciąg znaków |
Informacje o błędzie
This section describes the error codes and messages returned and fault variables
set by Edge when this policy triggers an error. This information is important to know if
you are developing fault rules to handle faults. If you want to capture an error and raise your own
custom error, set the continueOnError="true"
attribute on the policy root element.
To learn more, see
What you need to know about policy errors and Handling
faults.
Errors returned from Edge policies follow a consistent format as described in the Error code reference.
Runtime errors
These errors can occur when the policy executes.
Error Code | Message |
---|---|
ExecutionFailed | Failed to execute the RegularExpressionProtection StepDefinition {0}. Reason: {1} |
InstantiationFailed | Failed to instantiate the RegularExpressionProtection StepDefinition {0} |
NonMessageVariable | Variable {0} does not resolve to a Message |
SourceMessageNotAvailable | {0} message is not available for RegularExpressionProtection StepDefinition {1} |
ThreatDetected | Regular Expression Threat Detected in {0}: regex: {1} input: {2} |
VariableResolutionFailed | Failed to resolve variable {0} |
Deployment errors
Error Code | Message | Fix |
---|---|---|
CannotBeConvertedToNodeset | RegularExpressionProtection {0}: Result of xpath {1} cannot be converted to nodeset. Context {2} | build |
DuplicatePrefix | RegularExpressionProtection {0}: Duplicate prefix {1} | build |
EmptyJSONPathExpression | RegularExpressionProtection {0}: Empty JSONPath expression | build |
EmptyXPathExpression | RegularExpressionProtection {0}: Empty XPath expression | build |
InvalidRegularExpression | RegularExpressionProtection {0}: Invalid Regular Expression {1}, Context {2} | build |
JSONPathCompilationFailed | RegularExpressionProtection {0}: Failed to compile jsonpath {1}. Context {2} | build |
NONEmptyPrefixMappedToEmptyURI | RegularExpressionProtection {0}: Non-empty prefix {1} cannot be mapped to empty uri | build |
NoPatternsToEnforce | RegularExpressionProtection {0}: No patterns to enforce in {1} | build |
NothingToEnforce | RegularExpressionProtection {0}: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory | build |
XPathCompilationFailed | RegularExpressionProtection {0}: Failed to compile xpath {1}. Context {2} | build |
Fault variables
These variables are set when this policy triggers an error. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the table above. | fault.name Matches "ThreatDetected" |
regularexpressionprotection.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | regularexpressionprotection.Regular-Expressions-Protection-1.failed = true |