Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Cosa
Estrae informazioni da un messaggio (ad esempio, URI Path, Query Param, Header, Form Param, variabile, XML Payload o Payload JSON) e valuta i contenuti rispetto a normali regole predefinite le espressioni regolari. Se qualsiasi espressione regolare specificata restituisce true, il messaggio viene considerato e viene rifiutata.
Video
Guarda i video che seguono per avere ulteriori informazioni sulle norme relative alla protezione dalle espressioni regolari.
Video | Descrizione |
---|---|
Protezione contro gli attacchi di SQL injection (New Edge) | Proteggiti dagli attacchi di SQL injection utilizzando il criterio di protezione delle espressioni regolari la UI della nuova esperienza Edge. |
Protezione dagli attacchi SQL injection (Classic Edge) | Proteggiti dagli attacchi di SQL injection utilizzando il criterio di protezione delle espressioni regolari la UI di Edge Classic. |
Esempi
GitHub
Il regolamento di protezione esempio su GitHub illustra come intrappolare i potenziali attacchi di SQL injection inviati tramite un parametro di query. Inoltre, l'esempio illustra una buona prassi di impostare un valore 400 generico per impedire agli hacker di ottenere informazioni utili dalla risposta.
JavaScript include la protezione dagli attacchi
<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 illustra come utilizzare il criterio RegularExpressionProtection per valutare
I payload JSON per JavaScript includono gli attacchi. Nello specifico, i contenuti estratti
<JSONPath>
/<Expression>
vengono valutate in base a
espressione regolare in <JSONPath>
/<Pattern>
.
Se l'espressione regolare nel tuo
<JSONPath>
/<Pattern>
include caratteri riservati a XML
(", &, ', < o .), devi codificarla in XML prima di includerla nel file XML del criterio
di configurazione del deployment. Nell'esempio precedente, l'espressione regolare
<\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
è stato
Codifica XML come
<\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
.
Inoltre, se l'espressione regolare include barre (/), devi eseguire l'interpretazione letterale.
impostando il escapeSlashCharacter
di <JSONPayload>
a true
.
Corrispondenza senza distinzione tra maiuscole e minuscole
In genere, le corrispondenze senza distinzione tra maiuscole e minuscole sono molto comuni. Ecco un esempio di come poter
eseguirlo in un'espressione regolare usando il costrutto (?i)
. In questo
esempio, ad esempio, DELETE
, delete
e Delete
restituisce true.
<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>
Informazioni sul criterio di protezione dalle espressioni regolari
Apigee Edge consente di configurare espressioni regolari che possono essere valutate in base al traffico delle API in fase di runtime per identificare le minacce più comuni a livello di contenuto che seguono determinati modelli.
Un'espressione regolare, o in breve regex, è un insieme di stringhe che specificano un pattern in una stringa. Le espressioni regolari consentono la programmazione programmatica dei contenuti valutati per i pattern. È possibile utilizzare espressioni regolari, ad esempio, per valutare un indirizzo email per assicurarne la corretta struttura. Per ulteriori informazioni, consulta la sezione espressioni nei tutorial Java.
L'utilizzo più comune di RegularExpressionProtection è la valutazione di JSON e XML per contenuti dannosi.
Nessuna espressione regolare è in grado di eliminare tutti gli attacchi basati sui contenuti e più meccanismi dovrebbero essere combinati per consentire la difesa in profondità. Questa sezione descrive alcuni pattern consigliati per escludendo i contenuti.
Esempio di esclusione motivi
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 inclusione lato server |
<!--#(include|exec|echo|config|printenv)\s+.* Codifica XML: <!--#(include|exec|echo|config|printenv)\s+.* |
Inserimento della sintassi abbreviata di XPath |
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+ |
aggiunta della sintassi espansa di XPath |
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling)) |
aggiunta JavaScript |
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> Codifica XML: <\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> |
aggiunta 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 quanto segue elementi:
-
Elemento
<XMLPayload>
: specifica che le informazioni devono essere estratte da un payload XML e valutato in base all'espressione regolare fornita.Se utilizzi
<XMLPayload>
nel criterio, L'intestazioneContent-Type
della richiesta deve essere un content-type XML, comeapplication/xml
otext/xml
. -
Elemento
<JSONPayload>
: specifica che le informazioni devono essere estratte da un payload JSON e valutato in base all’espressione regolare fornita.Se utilizzi
<JSONPayload>
nel criterio, L'intestazioneContent-Type
della richiesta deve essere un content-type JSON, comeapplication/json
.
Di solito si progetta un'API in modo che accetti XML o JSON. Tuttavia, potrebbe esserci uno scenario
in cui l'API li accettava entrambi. Quindi, puoi definire un criterio di protezione dalle espressioni regolari
che utilizza entrambi gli elementi <XMLPayload>
e <JSONPayload>
.
Solo un elemento può essere applicato a una richiesta specifica in base al valore dell'attributo
Intestazione Content-Type
.
Riferimento elemento
Il riferimento agli elementi descrive gli elementi e gli attributi di 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 |
<Source> elemento
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 impostato su
message
, il criterio utilizza il messaggio della richiesta come origine quando è allegato a una richiesta
flusso di lavoro. Allo stesso modo, il criterio utilizza il messaggio di risposta quando allegato a un flusso di risposta.
Se il messaggio di origine non può essere risolto o viene risolto in un tipo diverso da messaggio, il criterio restituisce un errore.
<Source>response</Source>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | Stringa |
<IgnoreUnresolvedVariables> elemento
Determina se il criterio restituisce un errore quando rileva una variabile che irrisolvibili.
Se viene impostato su false
(valore predefinito), il criterio restituisce un errore quando un problema non risolvibile
. Se impostata su true
, la variabile non risolta viene considerata vuota
stringa (Null).
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Predefinita: | falso |
Presenza: | Facoltativo |
Tipo: | Booleano |
<URIPath> elemento
Specifica che le informazioni devono essere estratte dal percorso dell'URI della richiesta e valutate
rispetto alle espressioni regolari fornite. Devi specificarne almeno uno
Elemento <Pattern>
che specifica un pattern di espressione regolare da abbinare.
<URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | N/D |
<QueryParam> elemento
Specifica che le informazioni devono essere estratte dal parametro di query di richiesta e
valutati sulla base delle espressioni regolari fornite. Devi specificarne almeno uno
Elemento <Pattern>
che specifica un pattern di espressione regolare da abbinare.
<QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | N/D |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
nome | Nome del parametro di query della richiesta da cui è necessario estrarre le informazioni la valutazione rispetto alle espressioni regolari fornite. | N/D | Obbligatorio |
<Header> elemento
Specifica che le informazioni devono essere estratte dalle intestazioni della richiesta e della risposta e
valutati sulla base delle espressioni regolari fornite. Devi specificarne almeno uno
Elemento <Pattern>
che specifica un pattern di espressione regolare da abbinare.
<Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | N/D |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
nome |
Nome della richiesta e dell'intestazione della risposta da cui è necessario estrarre le informazioni per la valutazione rispetto alle espressioni regolari fornite. |
N/D | Obbligatorio |
<FormParam> elemento
Specifica che le informazioni devono essere estratte dal parametro del modulo di richiesta ed essere valutate
rispetto alle espressioni regolari fornite. Devi specificarne almeno uno
Elemento <Pattern>
che specifica un pattern di espressione regolare da abbinare.
<FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | N/D |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
nome |
Nome del parametro del modulo di richiesta da cui è necessario estrarre le informazioni la valutazione rispetto alle espressioni regolari fornite. |
N/D | Obbligatorio |
<Variable> elemento
Specifica che le informazioni devono essere estratte dalla variabile specificata e valutate in base a le espressioni regolari fornite.
<Variable name="request.content"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Variable>
Predefinita: | 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 |
<XMLPayload> elemento
Specifica che le informazioni devono essere estratte da un payload XML e valutate in base al 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>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | N/D |
<XMLPayload>/<Namespaces> elemento
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>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | Stringa |
<XMLPayload>/<Namespaces>/<Namespace> elemento
Specifica ogni spazio dei nomi su nella valutazione di XPath.<Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces>
Predefinita: | 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 |
<XMLPayload>/<XPath> elemento
Specifica l'XPath da valutare.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | N/D |
<XMLPayload>/<XPath>/<Expression> elemento
Specifica l'espressione XPath definita per la variabile. Solo espressioni XPath 1.0 sono supportati. Ad esempio:<Expression>/company/employee[@age>=$request.header.age]</Expression>
estrae i dettagli relativi ai 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>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | Stringa |
<XMLPayload>/<XPath>/<Type> elemento
Specifica il tipo di dati.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Predefinita: | 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
l'elemento <Pattern>
include caratteri riservati a XML (", &, ', < o
.), devi codificarlo in XML prima di includerlo.
<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Predefinita: | N/D |
Presenza: | Obbligatorio |
Tipo: | Stringa |
<JSONPayload> elemento
Specifica che le informazioni devono essere estratte da un payload JSON e valutate in base al espressioni regolari fornite.
<JSONPayload> <JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath> </JSONPayload>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | N/D |
Attributi
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
escapeSlashCharacter |
Imposta su |
true | Facoltativo |
<JSONPayload>/<JSONPath>/<Expression> elemento
Specifica l'espressione JSONPath definita per la variabile.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Predefinita: | N/D |
Presenza: | Facoltativo |
Tipo: | Stringa |
<JSONPayload>/<JSONPath>/<Pattern> elemento
Definisce il pattern dell'espressione regolare. Se un'espressione regolare nel tuo
L'elemento <Pattern>
include caratteri riservati a XML (", &, ', < o .),
devi codificarlo in XML prima di includerlo.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Predefinita: | 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 |