Anda sedang melihat dokumentasi Apigee Edge.
Buka
Dokumentasi Apigee X. info

Apa
Mengekstrak informasi dari pesan (misalnya, Jalur URI, Parameter Kueri, Header, Parameter Formulir, Variabel, Payload XML, atau Payload JSON) dan mengevaluasi konten tersebut berdasarkan ekspresi. Jika ekspresi reguler tertentu bernilai benar, pesan akan dianggap sebagai ancaman dan ditolak.
Video
Tonton video berikut untuk mempelajari lebih lanjut kebijakan Perlindungan Ekspresi Reguler.
Video | Deskripsi |
---|---|
Melindungi terhadap serangan injeksi SQL (Edge Baru) | Melindungi dari serangan injeksi SQL menggunakan kebijakan {i>Regular Expression Protection<i} di UI pengalaman New Edge. |
Melindungi terhadap serangan injeksi SQL (Edge Klasik) | Melindungi dari serangan injeksi SQL menggunakan kebijakan {i>Regular Expression Protection<i} di UI Klasik Edge. |
Contoh
GitHub
Perlindungan ekspresi reguler contoh di GitHub mengilustrasikan cara menjebak potensi serangan injeksi SQL yang dikeluarkan melalui parameter kueri. Selain itu, sampel ini menggambarkan praktik yang baik untuk menetapkan nilai 400 status error untuk mencegah peretas mendapatkan informasi berguna dari responsnya.
JavaScript mencakup perlindungan dari serangan
<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>
Contoh di atas menggambarkan cara menggunakan kebijakan RegularExpressionProtection untuk mengevaluasi
Payload JSON untuk JavaScript mencakup serangan. Secara khusus, konten yang diekstrak oleh
<JSONPath>
/<Expression>
dievaluasi berdasarkan
ekspresi reguler di <JSONPath>
/<Pattern>
.
Jika ekspresi reguler di
<JSONPath>
/<Pattern>
berisi karakter yang dicadangkan untuk XML
(", &, ', <, atau .), Anda harus mengenkodenya dalam XML sebelum menyertakannya dalam XML kebijakan
file konfigurasi Anda. Misalnya, dalam contoh di atas, ekspresi reguler
<\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
telah
Dikodekan sebagai XML sebagai
<\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
.
Selain itu, jika ekspresi reguler menyertakan garis miring ke depan (/), Anda harus meng-escape
keduanya dengan menyetel <JSONPayload>
escapeSlashCharacter
ke true
.
Pencocokan tidak peka huruf besar/kecil
Melakukan pencocokan yang tidak peka huruf besar/kecil adalah kasus penggunaan umum. Berikut adalah contoh
melakukannya dalam ekspresi reguler menggunakan konstruksi (?i)
. Di sini
misalnya, misalnya, DELETE
, delete
, dan Delete
akan
dievaluasi ke true.
<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>
Tentang kebijakan Regular Expression Protection
Apigee Edge memungkinkan Anda mengonfigurasi ekspresi reguler yang dapat dievaluasi terhadap traffic API saat runtime untuk mengidentifikasi ancaman tingkat konten umum yang mengikuti pola tertentu.
Ekspresi reguler, atau disingkat regex, adalah sekumpulan string yang menentukan pola dalam {i>string<i}. Ekspresi reguler memungkinkan konten untuk dijalankan secara terprogram dievaluasi untuk pola. Ekspresi reguler dapat digunakan, misalnya, untuk mengevaluasi alamat email untuk memastikan bahwa data itu terstruktur dengan benar. Untuk informasi selengkapnya, lihat Reguler Ekspresi dalam Tutorial Java.
Penggunaan RegularExpressionProtection yang paling umum adalah evaluasi JSON dan XML {i>payload<i} untuk konten berbahaya.
Tidak ada ekspresi reguler yang dapat mengeliminasi semua serangan berbasis konten, dan banyak mekanisme harus digabungkan untuk memungkinkan pertahanan mendalam. Bagian ini menjelaskan beberapa pola yang direkomendasikan untuk mengecualikan konten.
Contoh pengecualian pola
Ekspresi reguler harus dienkode XML dalam file konfigurasi XML kebijakan.
Nama | Regular Expression |
---|---|
Injeksi SQL |
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b)) |
Injeksi Sisi Server |
<!--#(include|exec|echo|config|printenv)\s+.* Dienkode dalam XML: <!--#(include|exec|echo|config|printenv)\s+.* |
Injeksi Sintaksis Singkatan XPath |
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+ |
Injeksi Sintaksis yang Diperluas di XPath |
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling)) |
Injeksi JavaScript |
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> Dienkode dalam XML: <\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> |
Injeksi Pengecualian Java |
.*?Exception in thread.* |
Menetapkan header Content-Type dalam permintaan dengan payload XML atau JSON
Payload kebijakan Regular Expression Protection dapat mencakup hal berikut elemen:
-
Elemen
<XMLPayload>
: Menentukan bahwa informasi yang perlu diekstrak payload XML dan dievaluasi terhadap ekspresi reguler yang disediakan.Jika Anda menggunakan
<XMLPayload>
di kebijakan, Header permintaanContent-Type
harus berupa jenis konten XML sepertiapplication/xml
atautext/xml
. -
Elemen
<JSONPayload>
: Menentukan bahwa informasi perlu diekstrak dari payload JSON dan dievaluasi berdasarkan ekspresi reguler yang disediakan.Jika Anda menggunakan
<JSONPayload>
di kebijakan, Header permintaanContent-Type
harus berupa jenis konten JSON sepertiapplication/json
.
Biasanya, Anda mendesain API untuk menerima XML atau JSON. Namun, bisa jadi ada skenario
yang mana API menerima keduanya. Anda kemudian dapat menentukan
kebijakan {i>Regular Expression Protection<i}
yang menggunakan elemen <XMLPayload>
dan <JSONPayload>
.
Hanya satu elemen yang akan diterapkan pada permintaan
tertentu berdasarkan nilai dari
Header Content-Type
.
Referensi elemen
Referensi elemen menjelaskan elemen dan atribut RegularExpressionProtection lebih lanjut.
<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> atribut
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
Tabel berikut menjelaskan atribut yang umum untuk semua elemen induk kebijakan:
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
name |
Nama internal kebijakan. Nilai atribut Secara opsional, gunakan elemen |
T/A | Wajib |
continueOnError |
Tetapkan ke Setel ke |
salah | Opsional |
enabled |
Setel ke Setel ke |
true | Opsional |
async |
Atribut ini tidak digunakan lagi. |
salah | Tidak digunakan lagi |
<DisplayName> elemen
Gunakan selain atribut name
untuk memberi label kebijakan di
editor proxy UI dengan nama natural language yang berbeda.
<DisplayName>Policy Display Name</DisplayName>
Default |
T/A Jika Anda menghapus elemen ini, nilai atribut |
---|---|
Ketersediaan | Opsional |
Jenis | String |
<Source> elemen
Menunjukkan pesan yang informasinya perlu diekstrak.
Jika elemen <Source>
dihilangkan, nilai akan ditetapkan secara default ke
message
. Misalnya, <Source>message</Source>
. Jika ditetapkan ke
message
, kebijakan tersebut akan menggunakan pesan permintaan sebagai sumber saat dilampirkan ke permintaan
alur kerja. Demikian pula, kebijakan tersebut menggunakan pesan respons saat dilampirkan ke alur respons.
Jika pesan sumber tidak dapat diselesaikan atau jika di-resolve menjadi jenis bukan pesan, kebijakan menghasilkan {i>error<i}.
<Source>response</Source>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | String |
<IgnoreUnresolvedVariables> elemen
Menentukan apakah kebijakan akan mengembalikan pesan {i>error<i} ketika menemukan variabel yang tidak dapat diselesaikan.
Jika disetel ke false
(default), kebijakan akan menampilkan error saat error yang tidak dapat diselesaikan
variabel ditemui. Jika ditetapkan ke true
, variabel yang belum terselesaikan akan dianggap kosong
string (Null).
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Default: | salah |
Kehadiran: | Opsional |
Jenis: | Boolean |
<URIPath> elemen
Menentukan bahwa informasi perlu diekstrak dari jalur URI permintaan dan dievaluasi
terhadap ekspresi reguler yang disediakan. Anda harus memberikan minimal satu
Elemen <Pattern>
yang menentukan pola ekspresi reguler yang akan dicocokkan.
<URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | T/A |
<QueryParam> elemen
Menentukan bahwa informasi yang perlu diekstrak dari parameter kueri permintaan dan
dievaluasi terhadap ekspresi reguler yang disediakan. Anda harus memberikan minimal satu
Elemen <Pattern>
yang menentukan pola ekspresi reguler yang akan dicocokkan.
<QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | T/A |
Atribut
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
nama | Nama parameter kueri permintaan yang informasinya perlu diekstrak terhadap ekspresi reguler yang disediakan. | T/A | Wajib |
<Header> elemen
Menentukan bahwa informasi perlu diekstrak dari header permintaan dan respons serta
dievaluasi terhadap ekspresi reguler yang disediakan. Anda harus memberikan minimal satu
Elemen <Pattern>
yang menentukan pola ekspresi reguler yang akan dicocokkan.
<Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | T/A |
Atribut
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
nama |
Nama header permintaan dan respons yang informasinya perlu diekstrak untuk evaluasi terhadap ekspresi reguler yang disediakan. |
T/A | Wajib |
<FormParam> elemen
Menyatakan bahwa informasi perlu diekstrak dari parameter formulir permintaan dan dievaluasi
terhadap ekspresi reguler yang disediakan. Anda harus memberikan minimal satu
Elemen <Pattern>
yang menentukan pola ekspresi reguler yang akan dicocokkan.
<FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | T/A |
Atribut
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
nama |
Nama parameter formulir permintaan yang informasinya perlu diekstrak terhadap ekspresi reguler yang disediakan. |
T/A | Wajib |
<Variable> elemen
Menentukan bahwa informasi perlu diekstrak dari variabel yang diberikan dan dievaluasi berdasarkan ekspresi reguler yang disediakan.
<Variable name="request.content"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Variable>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | T/A |
Atribut
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
nama |
Nama variabel yang informasinya perlu diekstrak untuk evaluasi terhadap ekspresi reguler yang disediakan. |
T/A | Wajib |
<XMLPayload> elemen
Menetapkan bahwa informasi perlu diekstrak dari payload XML dan dievaluasi berdasarkan ekspresi reguler yang disediakan.
<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>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | T/A |
<XMLPayload>/<Namespaces> elemen
Menentukan namespace yang akan digunakan dalam evaluasi 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>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | String |
<XMLPayload>/<Namespaces>/<Namespace> elemen
Menentukan setiap namespace untuk digunakan dalam evaluasi XPath.<Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | String |
Atribut
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
awalan |
Menyediakan awalan untuk membantu memenuhi syarat namespace tertentu. |
T/A | Wajib |
<XMLPayload>/<XPath> elemen
Menentukan XPath untuk dievaluasi.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | T/A |
<XMLPayload>/<XPath>/<Expression> elemen
Menentukan ekspresi XPath yang ditentukan untuk variabel. Hanya ekspresi XPath 1.0 didukung. Misalnya,<Expression>/company/employee[@age>=$request.header.age]</Expression>
mengekstrak detail karyawan yang usianya lebih dari atau sama dengan nilai yang ditentukan dalam
request.header.age
.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | String |
<XMLPayload>/<XPath>/<Type> elemen
Menentukan jenis data.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Default: | string |
Kehadiran: | Opsional |
Jenis: | String |
Nilai yang valid: |
String. Nilai yang valid mencakup |
<XMLPayload>/<XPath>/<Pattern> elemen
Menentukan pola ekspresi reguler. Jika ekspresi reguler di
elemen <Pattern>
Anda menyertakan karakter yang dicadangkan untuk XML (", &, ', <, atau
.), Anda harus mengenkodenya dengan XML sebelum menyertakannya.
<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
Default: | T/A |
Kehadiran: | Wajib |
Jenis: | String |
<JSONPayload> elemen
Menentukan bahwa informasi perlu diekstrak dari payload JSON dan dievaluasi berdasarkan ekspresi reguler yang disediakan.
<JSONPayload> <JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath> </JSONPayload>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | T/A |
Atribut
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
escapeSlashCharacter |
Tetapkan ke |
true | Opsional |
<JSONPayload>/<JSONPath>/<Expression> elemen
Menentukan ekspresi JSONPath yang ditentukan untuk variabel.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | String |
<JSONPayload>/<JSONPath>/<Pattern> elemen
Menentukan pola ekspresi reguler. Jika ekspresi reguler di
Elemen <Pattern>
berisi karakter yang dicadangkan untuk XML (", &, ', <, atau .),
Anda harus mengenkodenya dalam XML sebelum menyertakannya.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
Default: | T/A |
Kehadiran: | Wajib |
Jenis: | String |
Referensi error
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 |