Stai visualizzando la documentazione di Apigee Edge.
Vai alla
documentazione di Apigee X. informazioni
Cosa
Estrae informazioni da un messaggio (ad esempio Percorso URI, Parametro di query, Intestazione, Parametro modulo, Variabile, Payload XML o Payload JSON) e valuta tali contenuti rispetto a espressioni regolari predefinite. Se una delle espressioni regolari specificate restituisce true, il messaggio viene considerato una minaccia e viene rifiutato.
Video
Guarda i seguenti video per ulteriori informazioni sulle norme per la protezione delle espressioni regolari.
Video | Descrizione |
---|---|
Protezione dagli attacchi di SQL injection (nuovo Edge) | Proteggiti dagli attacchi SQL injection utilizzando il criterio di protezione delle espressioni regolari nell'interfaccia utente della nuova esperienza Edge. |
Protezione dagli attacchi di SQL injection (versione classica di Edge) | Proteggiti dagli attacchi di SQL injection utilizzando il criterio di protezione delle espressioni regolari nella UI classica di Edge. |
Samples
GitHub
L'esempio di protezione da regex su GitHub mostra come eseguire il trap di potenziali attacchi di SQL injection emessi tramite un parametro di query. Inoltre, l'esempio illustra una buona pratica che prevede l'impostazione di uno stato di errore 400 generico per impedire agli hacker di ottenere informazioni utili dalla risposta.
Includere la protezione dagli attacchi in JavaScript
<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>
L'esempio riportato sopra illustra come utilizzare il criterio NormalExpressionProtection per valutare i payload JSON per gli attacchi che includono JavaScript. In particolare, i contenuti estratti da <JSONPath>
/<Expression>
vengono valutati in base all'espressione regolare in <JSONPath>
/<Pattern>
.
Se l'espressione regolare in <JSONPath>
/<Pattern>
include caratteri riservati in XML (", &, ', < o .), devi codificarla in XML prima di includerla nel file di configurazione XML del criterio. Ad esempio, nell'esempio precedente, l'espressione regolare <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
è stata codificata in XML come <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
.
Inoltre, se l'espressione regolare include barre (/), devi eseguire l'escape
impostando l'attributo escapeSlashCharacter
<JSONPayload>
su true
.
Corrispondenza senza distinzione tra maiuscole e minuscole
È un caso d'uso comune per trovare corrispondenze senza distinzione tra maiuscole e minuscole. Di seguito è riportato un esempio di come eseguire questa operazione in un'espressione regolare utilizzando il costrutto (?i)
. In questo esempio, ad esempio, DELETE
, delete
e Delete
restituiscono true.
<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>
Informazioni sulle norme relative alla protezione delle espressioni regolari
Apigee Edge consente di configurare espressioni regolari che possono essere valutate in base al traffico API in fase di runtime per identificare minacce comuni a livello di contenuto che seguono determinati pattern.
Un'espressione regolare, abbreviata come regex, è un insieme di stringhe che specificano un pattern in una stringa. Le espressioni regolari consentono di valutare i pattern in modo programmatico. Le espressioni regolari possono essere utilizzate, ad esempio, per valutare un indirizzo email e assicurarsi che sia strutturato correttamente. Per ulteriori informazioni, consulta la sezione Espressioni regolari nei tutorial Java.
L'uso più comune di RegularExpressionProtection è la valutazione di payload JSON e XML per rilevare contenuti dannosi.
Nessuna espressione regolare può eliminare tutti gli attacchi basati sui contenuti e devono essere combinati più meccanismi per consentire una difesa in profondità. Questa sezione descrive alcuni pattern consigliati per l'esclusione di contenuti.
Esempi di pattern di esclusione
Le espressioni regolari devono avere la codifica XML nel file di configurazione XML del criterio.
Nome | Espressione regolare |
---|---|
SQL injection |
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b)) |
Inserimento inclusione lato server |
<!--#(include|exec|echo|config|printenv)\s+.* XML codificato: <!--#(include|exec|echo|config|printenv)\s+.* |
Inserimento sintassi abbreviata XPath |
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+ |
Inserimento sintassi XPath |
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling)) |
Inserimento JavaScript |
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> XML codificato: <\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> |
Iniezione di eccezioni Java |
.*?Exception in thread.* |
Imposta l'intestazione Content-Type in una richiesta con un payload XML o JSON
Il payload del criterio di protezione delle espressioni regolari può includere i seguenti elementi:
-
Elemento
<XMLPayload>
: specifica che le informazioni devono essere estratte da un payload XML e valutate in base all'espressione regolare fornita.Se utilizzi
<XMLPayload>
nel criterio, l'intestazioneContent-Type
della richiesta deve essere un tipo di contenuto XML, comeapplication/xml
otext/xml
. -
Elemento
<JSONPayload>
: specifica che le informazioni devono essere estratte da un payload JSON e valutate in base all'espressione regolare fornita.Se utilizzi
<JSONPayload>
nel criterio, l'intestazioneContent-Type
della richiesta deve essere un tipo di contenuto JSON, comeapplication/json
.
In genere, un'API deve accettare i formati XML o JSON. Tuttavia, potrebbe esserci uno scenario in cui l'API ha accettato entrambi. Puoi quindi definire un criterio di protezione delle espressioni regolari
che utilizzi entrambi gli elementi <XMLPayload>
e <JSONPayload>
.
In base al valore dell'intestazione Content-Type
, verrà applicato un solo elemento per una richiesta specifica.
Riferimento elemento
Il riferimento all'elemento descrive gli elementi e gli attributi del criterio 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>
Attributi <RegularExpressionProtection>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
La tabella seguente descrive gli attributi comuni a tutti gli elementi principali dei criteri:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
name |
Il nome interno della norma. Il valore dell'attributo Facoltativamente, utilizza l'elemento |
N/A | Obbligatorie |
continueOnError |
Impostalo su Imposta su |
false | Facoltativo |
enabled |
Imposta il criterio su Impostala su |
true | Facoltativo |
async |
Questo attributo è obsoleto. |
false | Deprecata |
Elemento <DisplayName>
Utilizzalo in aggiunta all'attributo name
per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.
<DisplayName>Policy Display Name</DisplayName>
Predefinito |
N/A Se ometti questo elemento, viene utilizzato il valore dell'attributo |
---|---|
Presenza | Facoltativo |
Tipo | Stringa |
Elemento <Source>
Indica il messaggio da cui è necessario estrarre le informazioni.
Se l'elemento <Source>
viene omesso, il valore predefinito è message
. Ad esempio: <Source>message</Source>
. Se viene impostato su message
, il criterio utilizza il messaggio della richiesta come origine quando viene associato a un flusso di richiesta. Analogamente, il criterio utilizza il messaggio di risposta quando viene associato a un flusso di risposta.
Se il messaggio di origine non può essere risolto o se viene risolto in un tipo diverso dal messaggio, il criterio restituisce un errore.
<Source>response</Source>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | Stringa |
Elemento <IgnoraUnresolvedVariables>
Determina se il criterio restituisce un errore quando rileva una variabile non risolvibile.
Se viene impostato su false
(valore predefinito), il criterio restituisce un errore quando viene rilevata una variabile non risolvibile. Se impostata su true
, la variabile non risolta viene trattata come stringa vuota (null).
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Predefinito: | false |
Presenza: | Facoltativo |
Tipo: | Booleano |
Elemento <URIPath>
Specifica che le informazioni devono essere estratte dal percorso dell'URI della richiesta e valutate in base alle espressioni regolari fornite. Devi fornire almeno un
elemento <Pattern>
che specifichi un modello di espressione regolare di cui trovare una corrispondenza.
<URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | N/A |
Elemento <QueryParam>
Specifica che le informazioni devono essere estratte dal parametro di query della richiesta e valutate in base alle espressioni regolari fornite. Devi fornire almeno un
elemento <Pattern>
che specifichi un modello di espressione regolare di cui trovare una corrispondenza.
<QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | N/A |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
nome | Nome del parametro di query della richiesta da cui devono essere estratte le informazioni per la valutazione in base alle espressioni regolari fornite. | N/A | Obbligatorie |
Elemento <Header>
Specifica che le informazioni devono essere estratte dalle intestazioni di richiesta e risposta e valutate in base alle espressioni regolari fornite. Devi fornire almeno un
elemento <Pattern>
che specifichi un modello di espressione regolare di cui trovare una corrispondenza.
<Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | N/A |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
nome |
Nome dell'intestazione della richiesta e della risposta da cui è necessario estrarre le informazioni per la valutazione in base alle espressioni regolari fornite. |
N/A | Obbligatorie |
Elemento <FormParam>
Specifica che le informazioni devono essere estratte dal parametro del modulo di richiesta e valutate in base alle espressioni regolari fornite. Devi fornire almeno un
elemento <Pattern>
che specifichi un modello di espressione regolare di cui trovare una corrispondenza.
<FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | N/A |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
nome |
Nome del parametro del modulo di richiesta da cui è necessario estrarre le informazioni per la valutazione in base alle espressioni regolari fornite. |
N/A | Obbligatorie |
Elemento <Variable>
Specifica che le informazioni devono essere estratte dalla variabile specificata e valutate in base alle espressioni regolari fornite.
<Variable name="request.content"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Variable>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | N/A |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
nome |
Nome della variabile da cui devono essere estratte le informazioni per la valutazione in base alle espressioni regolari fornite. |
N/A | Obbligatorie |
Elemento <XMLPayload>
Specifica che le informazioni devono essere estratte da un payload XML e valutate in base alle espressioni regolari fornite.
<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>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | N/A |
Elemento <XMLPayload>/<Namespaces>
Specifica gli spazi dei nomi da utilizzare nella valutazione di 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>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | Stringa |
Elemento <XMLPayload>/<Namespaces>/<Namespace>
Specifica ogni spazio dei nomi da utilizzare nella valutazione di XPath.<Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | Stringa |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
prefisso |
Fornisce un prefisso per qualificare un determinato spazio dei nomi. |
N/A | Obbligatorie |
Elemento <XMLPayload>/<XPath>
Specifica l'XPath da valutare.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | N/A |
Elemento <XMLPayload>/<XPath>/<Expression>
Specifica l'espressione XPath definita per la variabile. Sono supportate solo le espressioni XPath 1.0. Ad esempio,<Expression>/company/employee[@age>=$request.header.age]</Expression>
estrae i dettagli per i dipendenti la cui età è superiore o uguale al valore specificato in
request.header.age
.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | Stringa |
Elemento <XMLPayload>/<XPath>/<Type>
Specifica il tipo di dati.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Predefinito: | stringa |
Presenza: | Facoltativo |
Tipo: | Stringa |
Valori validi: |
Stringa. I valori validi sono |
Elemento <XMLPayload>/<XPath>/<Pattern>
Definisce il modello di espressione regolare. Se un'espressione regolare nell'elemento<Pattern>
include caratteri riservati in XML (", &, ', < o .), devi codificarla in XML prima di includerla.
<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Predefinito: | N/A |
Presenza: | Obbligatorie |
Tipo: | Stringa |
Elemento <JSONPayload>
Specifica che le informazioni devono essere estratte da un payload JSON e valutate in base alle espressioni regolari fornite.
<JSONPayload> <JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath> </JSONPayload>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | N/A |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
escapeSlashCharacter |
Impostalo su |
true | Facoltativo |
Elemento <JSONPayload>/<JSONPath>/<Expression>
Specifica l'espressione JSONPath definita per la variabile.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Predefinito: | N/A |
Presenza: | Facoltativo |
Tipo: | Stringa |
Elemento <JSONPayload>/<JSONPath>/<Pattern>
Definisce il modello di espressione regolare. Se un'espressione regolare nell'elemento
<Pattern>
include caratteri riservati in XML (", &, ', < o .),
devi codificarla in XML prima di includerla.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Predefinito: | N/A |
Presenza: | Obbligatorie |
Tipo: | Stringa |
Messaggi di errore
Questa sezione descrive i codici e i messaggi restituiti e le variabili di errore impostate da Edge quando questo criterio attiva un errore. Queste informazioni sono importanti per sapere se si stanno sviluppando regole di errore per la gestione degli errori. Per acquisire un errore e generare un errore personalizzato, imposta l'attributo continueOnError="true"
nell'elemento principale del criterio.
Per scoprire di più, consulta gli articoli
Cosa devi sapere sugli errori relativi alle norme e Gestione degli errori.
Gli errori restituiti dai criteri perimetrali seguono un formato coerente, come descritto in Riferimento ai codici di errore.
Errori di runtime
Questi errori possono verificarsi quando il criterio viene eseguito.
Codice di errore | Messaggio |
---|---|
ExecutionFailed | Impossibile eseguire la StepDefinition di RegularExpressionProtection {0}. Motivo: {1} |
InstantiationFailed | Impossibile creare un'istanza della StepDefinition RegularExpressionProtection {0} |
NonMessageVariable | La variabile {0} non si risolve in un messaggio. |
SourceMessageNotAvailable | {0} non è disponibile per RegularExpressionProtection StepDefinition {1} |
ThreatDetected | Minaccia espressione regolare rilevata in {0}: regex: {1} input: {2} |
VariableResolutionFailed | Impossibile risolvere la variabile {0} |
Errori di deployment
Codice di errore | Messaggio | Correggi |
---|---|---|
CannotBeConvertedToNodeset | RegularExpressionProtection {0}: il risultato di xpath {1} non può essere convertito in un set di nodi. Contesto {2} | build |
DuplicatePrefix | RegularExpressionProtection {0}: prefisso duplicato {1} | build |
EmptyJSONPathExpression | RegularExpressionProtection {0}: espressione JSONPath vuota | build |
EmptyXPathExpression | RegularExpressionProtection {0}: espressione XPath vuota | build |
InvalidRegularExpression | RegularEspressioneProtection {0}: espressione regolare non valida {1}, contesto {2} | build |
JSONPathCompilationFailed | RegularExpressionProtection {0}: impossibile compilare jsonpath {1}. Contesto {2} | build |
NON vuotoPrefissoMappedToVuotoURI | RegularExpressionProtection {0}: il prefisso non vuoto {1} non può essere mappato a un URI vuoto | build |
NoPatternsToEnforce | RegularExpressionProtection {0}: nessun pattern da applicare in {1} | build |
NothingToEnforce | RegularExpressionProtection {0}: è obbligatorio almeno un valore URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload | build |
XPathCompilationFailed | RegularExpressionProtection {0}: impossibile compilare xpath {1}. Contesto {2} | build |
Variabili di errore
Queste variabili vengono impostate quando questo criterio attiva un errore. Per maggiori informazioni, consulta la sezione Cosa devi sapere sugli errori relativi ai criteri.
Variabili | Dove | Esempio |
---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come indicato nella tabella precedente. | fault.name Matches "ThreatDetected" |
regularexpressionprotection.policy_name.failed |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | regularexpressionprotection.Regular-Expressions-Protection-1.failed = true |