Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Apa
Mengekstrak informasi dari pesan (misalnya, URI Path, Query Param, Header, Form Param, Variable, XML Payload, atau JSON Payload) dan mengevaluasi konten tersebut berdasarkan ekspresi reguler yang telah ditetapkan. Jika ekspresi reguler yang ditentukan bernilai benar (true), pesan akan dianggap sebagai ancaman dan akan ditolak.
Video
Tonton video berikut untuk mempelajari lebih lanjut kebijakan Perlindungan Ekspresi Reguler.
Video | Deskripsi |
---|---|
Melindungi dari serangan injeksi SQL (New Edge) | Melindungi dari serangan injeksi SQL menggunakan kebijakan Regular Expression Protection di UI pengalaman Edge Baru. |
Melindungi dari serangan injeksi SQL (classic Edge) | Melindungi dari serangan injeksi SQL menggunakan kebijakan Perlindungan Ekspresi Reguler di UI Edge Klasik. |
Contoh
GitHub
Contoh perlindungan ekspresi reguler di GitHub mengilustrasikan cara menangkap potensi serangan injeksi SQL yang dikeluarkan melalui parameter kueri. Selain itu, contoh tersebut menggambarkan praktik yang baik dalam menetapkan status error 400 umum untuk mencegah peretas mendapatkan informasi yang berguna dari respons tersebut.
JavaScript mencakup perlindungan terhadap 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 serangan yang disertakan dalam JavaScript. Secara khusus, konten yang diekstrak oleh
<JSONPath>
/<Expression>
dievaluasi terhadap
ekspresi reguler di <JSONPath>
/<Pattern>
.
Jika ekspresi reguler dalam
<JSONPath>
/<Pattern>
menyertakan karakter yang dicadangkan XML
(", &, ', <, atau .), Anda harus mengenkodenya ke XML sebelum menyertakannya dalam file konfigurasi
XML kebijakan. Misalnya, dalam contoh di atas, ekspresi reguler
<\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
telah
dienkode XML sebagai
<\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
.
Selain itu, jika ekspresi reguler Anda menyertakan garis miring (/), Anda harus meng-escape karakter tersebut dengan menetapkan atribut <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 cara melakukannya dalam ekspresi reguler menggunakan konstruksi (?i)
. Dalam contoh ini, misalnya, DELETE
, delete
, dan Delete
akan bernilai benar (true).
<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>
Tentang kebijakan Perlindungan Ekspresi Reguler
Dengan Apigee Edge, Anda dapat 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 kumpulan string yang menentukan pola dalam string. Ekspresi reguler memungkinkan konten dievaluasi secara terprogram untuk menemukan pola. Ekspresi reguler dapat digunakan, misalnya, untuk mengevaluasi alamat email guna memastikan bahwa strukturnya benar. Untuk informasi selengkapnya, lihat Ekspresi Reguler di Tutorial Java.
Penggunaan RegularExpressionProtection yang paling umum adalah evaluasi payload JSON dan XML untuk konten berbahaya.
Tidak ada ekspresi reguler yang dapat menghilangkan semua serangan berbasis konten, dan beberapa mekanisme harus digabungkan untuk memungkinkan pertahanan yang mendalam. Bagian ini menjelaskan beberapa pola yang direkomendasikan untuk mengecualikan konten.
Contoh pola pengecualian
Ekspresi reguler harus dienkode dengan XML dalam file konfigurasi XML kebijakan.
Nama | Ekspresi Reguler |
---|---|
Injeksi SQL |
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b)) |
Injeksi Sertakan Sisi Server |
<!--#(include|exec|echo|config|printenv)\s+.* Dienkode XML: <!--#(include|exec|echo|config|printenv)\s+.* |
Injeksi Sintaksis Singkatan XPath |
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+ |
Injeksi Sintaksis XPath yang Diperluas |
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling)) |
Injeksi JavaScript |
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> Dienkode 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 Perlindungan Ekspresi Reguler dapat mencakup elemen berikut:
-
Elemen
<XMLPayload>
: Menentukan bahwa informasi perlu diekstrak dari payload XML dan dievaluasi terhadap ekspresi reguler yang disediakan.Jika Anda menggunakan
<XMLPayload>
dalam kebijakan, headerContent-Type
permintaan 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>
dalam kebijakan, headerContent-Type
permintaan harus berupa jenis konten JSON sepertiapplication/json
.
Biasanya Anda mendesain API untuk menerima XML atau JSON. Namun, mungkin ada skenario ketika API menerima keduanya. Anda kemudian dapat menentukan kebijakan Perlindungan Ekspresi Reguler yang menggunakan elemen <XMLPayload>
dan <JSONPayload>
.
Hanya satu elemen yang akan diterapkan untuk permintaan tertentu berdasarkan nilai header Content-Type
.
Referensi elemen
Referensi elemen menjelaskan elemen dan atribut kebijakan 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>
Atribut <RegularExpressionProtection>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
Tabel berikut menjelaskan atribut yang sama untuk semua elemen induk kebijakan:
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
name |
Nama internal kebijakan. Nilai atribut Atau, gunakan elemen |
T/A | Wajib |
continueOnError |
Setel ke Setel ke |
false | Opsional |
enabled |
Setel ke Setel ke |
true | Opsional |
async |
Atribut ini sudah tidak digunakan lagi. |
false | Tidak digunakan lagi |
Elemen <DisplayName>
Gunakan selain atribut name
untuk memberi label kebijakan di
editor proxy UI pengelolaan 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 |
Elemen <Source>
Menunjukkan pesan dari informasi yang perlu diekstrak.
Jika elemen <Source>
dihilangkan, nilai akan ditetapkan secara default ke message
. Misalnya, <Source>message</Source>
. Jika ditetapkan ke
message
, kebijakan akan menggunakan pesan permintaan sebagai sumber saat dilampirkan ke alur
permintaan. Demikian juga, kebijakan tersebut menggunakan pesan respons saat dilampirkan ke alur respons.
Jika pesan sumber tidak dapat di-resolve atau jika pesan tersebut di-resolve menjadi jenis bukan pesan, kebijakan akan menampilkan error.
<Source>response</Source>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | String |
Elemen <IgnoreUnresolvedVariables>
Menentukan apakah kebijakan menampilkan error ketika menemukan variabel yang tidak dapat dipecahkan.
Jika disetel ke false
(default), kebijakan akan menampilkan error saat ditemukan variabel yang tidak dapat di-resolve. Jika ditetapkan ke true
, variabel yang belum terselesaikan akan diperlakukan sebagai string kosong (Null).
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Default: | false |
Kehadiran: | Opsional |
Jenis: | Boolean |
Elemen <URIPath>
Menentukan bahwa informasi perlu diekstrak dari jalur URI permintaan dan dievaluasi
berdasarkan ekspresi reguler yang disediakan. Anda harus menyediakan minimal satu
elemen <Pattern>
yang menentukan pola ekspresi reguler untuk dicocokkan.
<URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | T/A |
Elemen <QueryParam>
Menentukan bahwa informasi perlu diekstrak dari parameter kueri permintaan dan dievaluasi berdasarkan ekspresi reguler yang disediakan. Anda harus menyediakan minimal satu
elemen <Pattern>
yang menentukan pola ekspresi reguler untuk 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 |
---|---|---|---|
name | Nama parameter kueri permintaan yang informasinya perlu diekstrak untuk evaluasi ekspresi reguler yang disediakan. | T/A | Wajib |
Elemen <Header>
Menentukan bahwa informasi perlu diekstrak dari header permintaan dan respons, serta
dievaluasi berdasarkan ekspresi reguler yang disediakan. Anda harus menyediakan minimal satu
elemen <Pattern>
yang menentukan pola ekspresi reguler untuk 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 |
---|---|---|---|
name |
Nama header permintaan dan respons tempat informasi perlu diekstrak untuk evaluasi ekspresi reguler yang disediakan. |
T/A | Wajib |
Elemen <FormParam>
Menentukan bahwa informasi perlu diekstrak dari parameter formulir permintaan dan dievaluasi
berdasarkan ekspresi reguler yang disediakan. Anda harus menyediakan minimal satu
elemen <Pattern>
yang menentukan pola ekspresi reguler untuk 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 |
---|---|---|---|
name |
Nama parameter formulir permintaan yang informasinya perlu diekstrak untuk evaluasi ekspresi reguler yang disediakan. |
T/A | Wajib |
Elemen <Variable>
Menentukan bahwa informasi perlu diekstrak dari variabel yang ditentukan 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 |
---|---|---|---|
name |
Nama variabel tempat informasi yang perlu diekstrak untuk evaluasi berdasarkan ekspresi reguler yang diberikan. |
T/A | Wajib |
Elemen <XMLPayload>
Menentukan 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 |
Elemen <XMLPayload>/<Namespaces>
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 |
Elemen <XMLPayload>/<Namespaces>/<Namespace>
Menentukan setiap namespace yang akan 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 |
Memberikan awalan untuk membantu memenuhi syarat namespace tertentu. |
T/A | Wajib |
Elemen <XMLPayload>/<XPath>
Menentukan XPath yang akan 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 |
Elemen <XMLPayload>/<XPath>/<Expression>
Menentukan ekspresi XPath yang ditentukan untuk variabel. Hanya ekspresi XPath 1.0 yang didukung. Misalnya,<Expression>/company/employee[@age>=$request.header.age]</Expression>
mengekstrak detail untuk 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 |
Elemen <XMLPayload>/<XPath>/<Type>
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 valid: |
String. Nilai yang valid mencakup |
Elemen <XMLPayload>/<XPath>/<Pattern>
Mendefinisikan pola ekspresi reguler. Jika ekspresi reguler dalam
elemen <Pattern>
menyertakan karakter yang dicadangkan 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 |
Elemen <JSONPayload>
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 |
Elemen <JSONPayload>/<JSONPath>/<Expression>
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 |
Elemen <JSONPayload>/<JSONPath>/<Pattern>
Mendefinisikan pola ekspresi reguler. Jika ekspresi reguler dalam elemen
<Pattern>
menyertakan karakter yang dicadangkan XML (", &, ', <, atau .),
Anda harus mengenkodenya dengan 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
Bagian ini menjelaskan kode dan pesan error yang ditampilkan, serta variabel kesalahan yang ditetapkan oleh Edge saat kebijakan ini memicu error. Informasi ini penting untuk diketahui apakah Anda mengembangkan aturan kesalahan untuk menangani kesalahan. Jika ingin menangkap error dan melaporkan error kustom Anda sendiri, tetapkan atribut continueOnError="true"
pada elemen root kebijakan.
Untuk mempelajari lebih lanjut, lihat
Hal yang perlu Anda ketahui tentang error kebijakan dan Menangani
kesalahan.
Error yang ditampilkan dari kebijakan Edge mengikuti format yang konsisten seperti yang dijelaskan dalam Referensi kode error.
Error runtime
Error ini dapat terjadi saat kebijakan dieksekusi.
Kode Error | Pesan |
---|---|
ExecutionFailed | Gagal menjalankan RegularExpressionProtection StepDefinition {0}. Alasan: {1} |
InstantiationFailed | Gagal membuat instance RegularExpressionProtection StepDefinition {0} |
NonMessageVariable | Variabel {0} tidak menghasilkan Pesan |
SourceMessageNotAvailable | {0} tidak tersedia untuk RegularExpressionProtection StepDefinition {1} |
ThreatDetected | Ancaman Ekspresi Reguler Terdeteksi di {0}: ekspresi reguler: {1} input: {2} |
VariableResolutionFailed | Gagal me-resolve variabel {0} |
Error saat deployment
Kode Error | Pesan | Perbaiki |
---|---|---|
CannotBeConvertedToNodeset | RegularExpressionProtection {0}: Hasil xpath {1} tidak dapat dikonversi ke nodeset. Konteks {2} | build |
DuplicatePrefix | RegularExpressionProtection {0}: Awalan duplikat {1} | build |
EmptyJSONPathExpression | RegularExpressionProtection {0}: Ekspresi JSONPath kosong | build |
EmptyXPathExpression | RegularExpressionProtection {0}: Ekspresi XPath kosong | build |
InvalidRegularExpression | RegularExpressionProtection {0}: Ekspresi Reguler Tidak Valid {1}, Konteks {2} | build |
JSONPathCompilationFailed | RegularExpressionProtection {0}: Gagal mengompilasi jsonpath {1}. Konteks {2} | build |
NONEmptyPrefixMappedToEmptyURI | RegularExpressionProtection {0}: Awalan tidak kosong {1} tidak dapat dipetakan ke uri kosong | build |
NoPatternsToEnforce | RegularExpressionProtection {0}: Tidak ada pola untuk diterapkan di {1} | build |
NothingToEnforce | RegularExpressionProtection {0}: setidaknya salah satu dari URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload bersifat wajib | build |
XPathCompilationFailed | RegularExpressionProtection {0}: Gagal mengompilasi xpath {1}. Konteks {2} | build |
Variabel kesalahan
Variabel ini ditetapkan saat kebijakan ini memicu error. Untuk informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.
Variabel | Dari mana | Contoh |
---|---|---|
fault.name="fault_name" |
fault_name adalah nama kesalahan, seperti yang tercantum pada tabel di atas. | fault.name Matches "ThreatDetected" |
regularexpressionprotection.policy_name.failed |
policy_name adalah nama kebijakan yang ditentukan pengguna yang menampilkan kesalahan. | regularexpressionprotection.Regular-Expressions-Protection-1.failed = true |