Halaman ini berlaku untuk Apigee dan Apigee hybrid.
Lihat dokumentasi
Apigee Edge.
API yang menerima payload JSON rentan terhadap serangan berbahaya yang dirancang untuk membebani parser JSON. Serangan ini dapat mencakup payload dengan elemen array yang berlebihan, struktur yang sangat bertingkat, atau string yang sangat panjang, yang dapat menyebabkan layanan error atau menggunakan memori yang berlebihan.
Kebijakan JSONThreatProtection meminimalkan risiko ini dengan menyaring permintaan masuk untuk payload yang melanggar batas yang ditentukan pada struktur seperti array dan string, sehingga secara efektif melindungi layanan backend Anda dari serangan penolakan layanan atau parser ini.
Kebijakan ini adalah Kebijakan yang dapat diperluas dan penggunaan kebijakan ini mungkin memiliki implikasi biaya atau penggunaan, bergantung pada lisensi Apigee Anda. Untuk mengetahui informasi tentang jenis kebijakan dan implikasi penggunaannya, lihat Jenis kebijakan.
Referensi elemen
Referensi elemen menjelaskan elemen dan atribut kebijakan JSONThreatProtection.
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1"> <DisplayName>JSONThreatProtection 1</DisplayName> <ArrayElementCount>20</ArrayElementCount> <ContainerDepth>10</ContainerDepth> <ObjectEntryCount>15</ObjectEntryCount> <ObjectEntryNameLength>50</ObjectEntryNameLength> <Source>request</Source> <StringValueLength>500</StringValueLength> </JSONThreatProtection>
Atribut <JSONThreatProtection>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
Tabel berikut menjelaskan atribut yang umum untuk semua elemen induk kebijakan:
| Atribut | Deskripsi | Default | Kehadiran |
|---|---|---|---|
name |
Nama internal kebijakan. Nilai atribut Secara opsional, gunakan elemen |
T/A | Wajib |
continueOnError |
Tetapkan ke Tetapkan ke |
false | Opsional |
enabled |
Tetapkan ke Tetapkan ke |
benar | Opsional |
async |
Atribut ini tidak digunakan lagi. |
false | Tidak digunakan lagi |
Elemen <DisplayName>
Gunakan selain atribut name untuk melabeli kebijakan di editor proxy UI pengelolaan dengan nama bahasa alami yang berbeda.
<DisplayName>Policy Display Name</DisplayName>
| Default |
T/A Jika Anda menghapus elemen ini, nilai atribut |
|---|---|
| Kehadiran | Opsional |
| Jenis | String |
Elemen <ArrayElementCount>
Menentukan jumlah maksimum elemen yang diizinkan dalam array.
<ArrayElementCount>20</ArrayElementCount>
| Default: | Jika Anda tidak menentukan elemen ini, atau jika Anda menentukan bilangan bulat negatif, sistem tidak akan menerapkan batas. |
| Kehadiran: | Opsional |
| Jenis: | Bilangan bulat |
Elemen <ContainerDepth>
Menentukan kedalaman penampungan maksimum yang diizinkan, dengan penampung berupa objek atau array. Misalnya, array yang berisi objek yang berisi objek akan menghasilkan kedalaman penampungan 3.
<ContainerDepth>10</ContainerDepth>
| Default: | Jika Anda tidak menentukan elemen ini, atau jika Anda menentukan bilangan bulat negatif, sistem tidak akan menerapkan batas apa pun. |
| Kehadiran: | Opsional |
| Jenis: | Bilangan bulat |
Elemen <ObjectEntryCount>
Menentukan jumlah maksimum entri yang diizinkan dalam objek.
<ObjectEntryCount>15</ObjectEntryCount>
| Default: | Jika Anda tidak menentukan elemen ini, atau jika Anda menentukan bilangan bulat negatif, sistem tidak akan menerapkan batas apa pun. |
| Kehadiran: | Opsional |
| Jenis: | Bilangan bulat |
Elemen <ObjectEntryNameLength>
Menentukan panjang string maksimum yang diizinkan untuk nama properti dalam objek.
<ObjectEntryNameLength>50</ObjectEntryNameLength>
| Default: | Jika Anda tidak menentukan elemen ini, atau jika Anda menentukan bilangan bulat negatif, sistem tidak akan menerapkan batas. |
| Kehadiran: | Opsional |
| Jenis: | Bilangan bulat |
Elemen <Source>
Pesan yang akan diperiksa untuk serangan payload JSON. Biasanya, setelan ini ditetapkan ke
request, karena Anda biasanya perlu memvalidasi permintaan masuk dari aplikasi klien.
Jika disetel ke message, elemen ini akan otomatis mengevaluasi pesan permintaan
saat dilampirkan ke alur permintaan dan pesan respons saat dilampirkan ke alur
respons.
<Source>request</Source>
| Default: | permintaan |
| Kehadiran: | Opsional |
| Jenis: |
String. Nilai yang valid: request, response, atau message. |
Elemen <StringValueLength>
Menentukan panjang maksimum yang diizinkan untuk nilai string.
<StringValueLength>500</StringValueLength>
| Default: | Jika Anda tidak menentukan elemen ini, atau jika Anda menentukan bilangan bulat negatif, sistem tidak akan menerapkan batas. |
| Kehadiran: | Opsional |
| Jenis: | Bilangan bulat |
Referensi error
This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
steps.jsonthreatprotection.ExecutionFailed |
500 |
The JSONThreatProtection policy can throw many different types of ExecutionFailed errors.
Most of these errors occur when a specific threshold set in the policy is exceeded. These
types of errors include:
object entry name length,
object entry count,
array element count,
container depth,
string string value length.
This error also occurs when the payload contains an
invalid JSON object.
|
build |
steps.jsonthreatprotection.SourceUnavailable |
500 |
This error occurs if the message
variable specified in the <Source> element is either:
|
build |
steps.jsonthreatprotection.NonMessageVariable |
500 |
This error occurs if the <Source> element is set to a variable which
is not of type
message.
|
build |
Deployment errors
None.
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 Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "SourceUnavailable" |
jsonattack.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | jsonattack.JTP-SecureRequest.failed = true |
Example error response
{
"fault": {
"faultstring": "JSONThreatProtection[JPT-SecureRequest]: Execution failed. reason: JSONThreatProtection[JTP-SecureRequest]: Exceeded object entry name length at line 2",
"detail": {
"errorcode": "steps.jsonthreatprotection.ExecutionFailed"
}
}
}Example fault rule
<FaultRule name="JSONThreatProtection Policy Faults">
<Step>
<Name>AM-CustomErrorResponse</Name>
<Condition>(fault.name Matches "ExecutionFailed") </Condition>
</Step>
<Condition>(jsonattack.JPT-SecureRequest.failed = true) </Condition>
</FaultRule>
Skema
Catatan penggunaan
Seperti layanan berbasis XML, API yang mendukung notasi objek JavaScript (JSON) rentan terhadap serangan tingkat konten. Serangan JSON sederhana mencoba menggunakan struktur yang membebani parser JSON untuk membuat layanan error dan memicu serangan denial-of-service tingkat aplikasi. Semua setelan bersifat opsional dan harus disesuaikan untuk mengoptimalkan persyaratan layanan Anda terhadap potensi kerentanan.
Topik terkait
Kebijakan RegularExpressionProtection