Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Cosa
Estrae informazioni da un messaggio (ad esempio, percorso URI, parametro di query, intestazione, parametro del modulo, variabile, payload XML o payload JSON) e valuta i contenuti in base a espressioni regolari predefinite. Se una delle espressioni regolari specificate restituisce il valore true, il messaggio viene considerato una minaccia e viene rifiutato.
Video
Guarda i seguenti video per saperne di più sulla policy di protezione delle espressioni regolari.
| Video | Descrizione |
|---|---|
| Protezione dagli attacchi di SQL injection (New Edge) | Proteggiti dagli attacchi di SQL injection utilizzando il criterio di protezione delle espressioni regolari nell'interfaccia utente della nuova esperienza Edge. |
| Protezione dagli attacchi di SQL injection (Classic Edge) | Proteggiti dagli attacchi di SQL injection utilizzando il criterio di protezione delle espressioni regolari nell'interfaccia utente Edge classica. |
Esempi
GitHub
L'esempio regex-protection su GitHub mostra come intercettare potenziali attacchi di SQL injection emessi tramite un parametro di query. Inoltre, l'esempio illustra una buona pratica di impostazione di uno stato di errore generico 400 per impedire agli hacker di ottenere informazioni utili dalla risposta.
Protezione dagli attacchi di inclusione 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 precedente mostra come utilizzare il criterio RegularExpressionProtection per valutare
i payload JSON per gli attacchi di inclusione 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 XML
(", &, ', < o .), devi codificarla in XML prima di includerla nel file di configurazione XML
delle norme. 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
aggiungere un carattere di escape impostando l'attributo <JSONPayload> escapeSlashCharacter
su true.
Corrispondenza senza distinzione tra maiuscole e minuscole
È un caso d'uso comune eseguire la corrispondenza senza fare distinzione tra maiuscole e minuscole. Ecco un esempio di come puoi
ottenere questo risultato in un'espressione regolare utilizzando la struttura (?i). In questo
esempio, ad esempio, DELETE, delete e Delete restituiranno
true.
<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>
Informazioni sul criterio di protezione delle espressioni regolari
Apigee Edge ti consente di configurare espressioni regolari che possono essere valutate rispetto al traffico API in fase di runtime per identificare minacce comuni a livello di contenuti che seguono determinati pattern.
Un'espressione regolare, o regex in breve, è un insieme di stringhe che specificano un pattern in una stringa. Le espressioni regolari consentono di valutare i pattern dei contenuti in modo programmatico. Le espressioni regolari possono essere utilizzate, ad esempio, per valutare un indirizzo email per assicurarsi che sia strutturato correttamente. Per saperne di più, consulta Espressioni regolari nei tutorial di Java.
L'utilizzo più comune di RegularExpressionProtection è la valutazione dei payload JSON e XML per contenuti dannosi.
Nessuna espressione regolare può eliminare tutti gli attacchi basati sui contenuti e devono essere combinati più meccanismi per consentire la difesa in profondità. Questa sezione descrive alcuni pattern consigliati per l'esclusione dei contenuti.
Pattern di esclusione di esempio
Le espressioni regolari devono essere codificate in XML nel file di configurazione XML del criterio.
| Nome | Espressione regolare |
|---|---|
| SQL injection |
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b)) |
| Iniezione di Server Side Include |
<!--#(include|exec|echo|config|printenv)\s+.* Codifica XML: <!--#(include|exec|echo|config|printenv)\s+.* |
| Iniezione di sintassi abbreviata XPath |
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+ |
| Iniezione di sintassi espansa XPath |
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling)) |
| JavaScript Injection |
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> Codifica XML: <\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> |
| Java Exception Injection |
.*?Exception in thread.* |
Impostare 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-Typedella richiesta deve essere un tipo di contenuto XML, ad esempioapplication/xmlotext/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>nella policy, l'intestazioneContent-Typedella richiesta deve essere un tipo di contenuto JSON comeapplication/json.
In genere, si progetta un'API per accettare XML o JSON. Tuttavia, potrebbe verificarsi uno scenario
in cui l'API ha accettato entrambi. Potresti quindi definire una policy di protezione delle espressioni regolari
che utilizza sia gli elementi <XMLPayload> che <JSONPayload>.
Solo un elemento verrà applicato a una richiesta specifica in base al valore dell'intestazione Content-Type.
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>
<RegularExpressionProtection> attributi
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
La tabella seguente descrive gli attributi comuni a tutti gli elementi principali del criterio:
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
name |
Il nome interno del criterio. Il valore dell'attributo Se vuoi, puoi utilizzare l'elemento |
N/D | Obbligatorio |
continueOnError |
Imposta il valore su Imposta su |
falso | Facoltativo |
enabled |
Imposta il valore su Imposta |
true | Facoltativo |
async |
Questo attributo è obsoleto. |
falso | Deprecato |
<DisplayName> elemento
Da utilizzare in aggiunta all'attributo name per etichettare il criterio in
editor proxy della UI di gestione con un nome diverso e in linguaggio naturale.
<DisplayName>Policy Display Name</DisplayName>
| Predefinito |
N/D Se ometti questo elemento, il valore dell'attributo |
|---|---|
| Presenza | Facoltativo |
| Tipo | Stringa |
Elemento <Source>
Indica il messaggio da cui devono essere estratte le informazioni.
Se l'elemento <Source> viene omesso, il valore predefinito è
message. Ad esempio: <Source>message</Source>. Se impostato su
message, il criterio utilizza il messaggio di richiesta come origine quando è collegato a un flusso di richieste. Allo stesso modo, la policy utilizza il messaggio di risposta quando è collegata a un flusso di risposta.
Se il messaggio di origine non può essere risolto o se viene risolto in un tipo non di messaggio, il criterio restituisce un errore.
<Source>response</Source>
| Predefinito: | N/D |
| Presenza: | Facoltativo |
| Tipo: | Stringa |
Elemento <IgnoreUnresolvedVariables>
Determina se la policy restituisce un errore quando rileva una variabile non risolvibile.
Se è impostato su false (valore predefinito), il criterio restituisce un errore quando viene rilevata una variabile non risolvibile. Se impostato 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 URI della richiesta e valutate
in base alle espressioni regolari fornite. Devi fornire almeno un elemento
<Pattern> che specifichi un pattern di espressione regolare da abbinare.
<URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath>
| Predefinito: | N/D |
| Presenza: | Facoltativo |
| Tipo: | N/D |
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 pattern di espressione regolare da abbinare.
<QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam>
| Predefinito: | N/D |
| Presenza: | Facoltativo |
| Tipo: | N/D |
Attributi
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
| nome | Nome del parametro di query della richiesta da cui devono essere estratte le informazioni per la valutazione rispetto alle espressioni regolari fornite. | N/D | Obbligatorio |
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 pattern di espressione regolare da abbinare.
<Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header>
| Predefinito: | N/D |
| Presenza: | Facoltativo |
| Tipo: | N/D |
Attributi
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
| nome |
Nome dell'intestazione della richiesta e della risposta da cui devono essere estratte le informazioni per la valutazione rispetto alle espressioni regolari fornite. |
N/D | Obbligatorio |
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 pattern di espressione regolare da abbinare.
<FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam>
| Predefinito: | N/D |
| Presenza: | Facoltativo |
| Tipo: | N/D |
Attributi
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
| nome |
Nome del parametro del modulo di richiesta da cui devono essere estratte le informazioni per la valutazione rispetto alle espressioni regolari fornite. |
N/D | Obbligatorio |
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/D |
| Presenza: | Facoltativo |
| Tipo: | N/D |
Attributi
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
| nome |
Nome della variabile da cui devono essere estratte le informazioni per la valutazione rispetto alle espressioni regolari fornite. |
N/D | Obbligatorio |
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/D |
| Presenza: | Facoltativo |
| Tipo: | N/D |
Elemento <XMLPayload>/<Namespaces>
Specifica gli spazi dei nomi da utilizzare nella valutazione 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/D |
| Presenza: | Facoltativo |
| Tipo: | Stringa |
Elemento <XMLPayload>/<Namespaces>/<Namespace>
Specifica ogni spazio dei nomi da utilizzare nella valutazione XPath.<Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces>
| Predefinito: | N/D |
| Presenza: | Facoltativo |
| Tipo: | Stringa |
Attributi
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
| prefisso |
Fornisce un prefisso per qualificare un determinato spazio dei nomi. |
N/D | Obbligatorio |
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/D |
| Presenza: | Facoltativo |
| Tipo: | N/D |
<XMLPayload>/<XPath>/<Expression> elemento
Specifica l'espressione XPath definita per la variabile. Sono supportate solo espressioni XPath 1.0. Ad esempio,<Expression>/company/employee[@age>=$request.header.age]</Expression>
estrae i dettagli dei dipendenti la cui età è maggiore 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/D |
| Presenza: | Facoltativo |
| Tipo: | Stringa |
<XMLPayload>/<XPath>/<Type> element
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 includono |
<XMLPayload>/<XPath>/<Pattern> elemento
Definisce il pattern dell'espressione regolare. Se un'espressione regolare nell'elemento<Pattern> include caratteri riservati 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/D |
| Presenza: | Obbligatorio |
| 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/D |
| Presenza: | Facoltativo |
| Tipo: | N/D |
Attributi
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
| escapeSlashCharacter |
Imposta questo campo 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/D |
| Presenza: | Facoltativo |
| Tipo: | Stringa |
elemento <JSONPayload>/<JSONPath>/<Pattern>
Definisce il pattern dell'espressione regolare. Se un'espressione regolare nell'elemento
<Pattern> include caratteri riservati 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/D |
| Presenza: | Obbligatorio |
| 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 |