Anda sedang melihat dokumentasi Apigee Edge.
Buka
Dokumentasi Apigee X. info
Apa
Atasi kerentanan XML dan minimalkan serangan terhadap API Anda. Secara opsional, deteksi payload XML serangan berdasarkan batas-batas yang telah dikonfigurasi. Layar terhadap ancaman XML menggunakan pendekatan:
- Validasi pesan terhadap skema XML (
.xsd
) - Evaluasi isi pesan untuk menemukan kata kunci atau pola tertentu yang akan dikecualikan
- Deteksi pesan yang rusak atau salah format sebelum pesan tersebut diuraikan
Referensi elemen
Referensi elemen menjelaskan elemen dan atribut XMLThreatProtection lebih lanjut.
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1"> <DisplayName>XML Threat Protection 1</DisplayName> <NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits> <Source>request</Source> <StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits> <ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits> </XMLThreatProtection>
<XMLThreatProtection> atribut
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-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 |
<NameLimits> elemen
Menentukan batas karakter yang akan diperiksa dan diterapkan oleh kebijakan.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | T/A |
<NameLimits>/<Element> elemen
Menentukan batas jumlah karakter maksimum yang diizinkan dalam setiap nama elemen dalam XML dokumen.
Misalnya, pertimbangkan XML berikut:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
Saat menganalisis XML di atas, nilai elemen <Element>
dalam kebijakan
cuplikan di bawah ini akan memvalidasi nama elemen tersebut (book
, title
,
author
, dan year)
tidak melebihi 10
karakter.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: | Bilangan Bulat |
<NameLimits>/<Attribute> elemen
Menentukan batas jumlah karakter maksimum yang diizinkan dalam nama atribut di Dokumen XML.
Misalnya, pertimbangkan XML berikut:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
Saat menganalisis XML di atas, nilai elemen <Attribute>
dalam kebijakan
cuplikan di bawah ini akan memvalidasi bahwa nama atribut category
tidak melebihi
10
karakter.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: | Bilangan Bulat |
<NameLimits>/<NamespacePrefix> elemen
Menentukan batas jumlah maksimum karakter yang diizinkan dalam awalan namespace di Dokumen XML.
Misalnya, pertimbangkan XML berikut:
<ns1:myelem xmlns:ns1="http://ns1.com"/>
Saat menganalisis XML di atas, nilai elemen <NamespacePrefix>
di metode
cuplikan kebijakan di bawah akan memvalidasi bahwa awalan namespace ns1
tidak melebihi
10
karakter.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: | Bilangan Bulat |
<NameLimits>/<ProcessingInstructionTarget> elemen
Menentukan batas jumlah karakter maksimum yang diizinkan dalam target petunjuk pemrosesan dalam dokumen XML.
Misalnya, pertimbangkan XML berikut:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
Saat menganalisis XML di atas, elemen <ProcessingInstructionTarget>
dalam cuplikan kebijakan di bawah ini akan memvalidasi bahwa target petunjuk pemrosesan
xml-stylesheet
tidak melebihi 10
karakter.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: | Bilangan Bulat |
<Source> elemen
Pesan yang akan disaring untuk serangan payload XML. Fungsi ini paling sering disetel ke
request
, karena Anda biasanya perlu memvalidasi permintaan masuk dari aplikasi klien.
Jika ditetapkan ke message
, elemen ini akan otomatis mengevaluasi pesan permintaan
ketika dilampirkan ke alur permintaan dan pesan respons saat dilampirkan pada respons
alur kerja.
<Source>request</Source>
Default: | minta |
Kehadiran: | Opsional |
Jenis: |
String. Pilih dari |
<StructuralLimits> elemen
Menentukan batas struktural yang akan diperiksa dan diterapkan oleh kebijakan.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: | T/A |
<StructuralLimits>/<NodeDepth> elemen
Menentukan kedalaman node maksimum yang diizinkan dalam XML.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan Bulat |
<StructuralLimits>/<AttributeCountPerElement> elemen
Menentukan jumlah atribut maksimum yang diizinkan untuk setiap elemen.
Misalnya, pertimbangkan XML berikut:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>Saat menganalisis XML di atas, nilai elemen
<AttributeCountPerElement>
dalam cuplikan kebijakan di bawah ini akan memvalidasi bahwa elemen book
, title
,
author
, dan year
masing-masing tidak memiliki lebih dari 2
atribut.
Perlu diketahui bahwa atribut yang digunakan untuk menentukan namespace tidak dihitung.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan Bulat |
<StructuralLimits>/<NameSpaceCountPerElement> elemen
Menentukan jumlah maksimum definisi namespace yang diizinkan untuk setiap elemen.
Misalnya, pertimbangkan XML berikut:
<e1 attr1="val1" attr2="val2"> <e2 xmlns="http://apigee.com" xmlns:yahoo="http://yahoo.com" one="1" yahoo:two="2"/> </e1>
Saat menganalisis XML di atas, nilai elemen <NamespaceCountPerElement>
dalam cuplikan kebijakan di bawah akan memvalidasi bahwa elemen e1
dan e2
masing-masing tidak memiliki lebih dari 2
definisi namespace. Dalam hal ini, <e1> memiliki 0 definisi namespace dan
<e2> memiliki 2 namespace
definisi: xmlns="http://apigee.com"
dan
xmlns:yahoo="http://yahoo.com"
.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan Bulat |
<StructuralLimits>/<ChildCount> elemen
Menentukan jumlah maksimum elemen turunan yang diizinkan untuk setiap elemen.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan Bulat |
Atribut
Atribut | Default | Ketersediaan |
---|---|---|
includeComment | true | Opsional |
includeElement | true | Opsional |
includeProcessingInstructions | true | Opsional |
includeText | true | Opsional |
<ValueLimits> elemen
Menentukan batas karakter untuk nilai yang akan diperiksa dan diterapkan oleh kebijakan.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Default: | T/A |
Kehadiran: | Opsional |
Jenis: |
T/A |
<ValueLimits>/<Text> elemen
Menentukan batas karakter untuk node teks yang ada dalam dokumen XML.
Misalnya, pertimbangkan XML berikut:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>Saat menganalisis XML di atas, nilai elemen
<Text>
dalam kebijakan
cuplikan di bawah akan memvalidasi bahwa nilai teks elemen Learning XML
, Erik T.
Ray,
, dan 2003
masing-masing tidak melebihi 15
karakter.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan Bulat |
<ValueLimits>/<Attribute> elemen
Menentukan batas karakter untuk setiap nilai atribut yang ada dalam dokumen XML.
Misalnya, pertimbangkan XML berikut:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>Saat menganalisis XML di atas, nilai elemen
<Attribute>
dalam kebijakan
cuplikan di bawah ini akan memvalidasi bahwa nilai atribut WEB
tidak melebihi
10
karakter.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan Bulat |
<ValueLimits>/<NamespaceURI> elemen
Menentukan batas karakter untuk setiap URI namespace yang ada dalam dokumen XML.
Misalnya, pertimbangkan XML berikut:
<ns1:myelem xmlns:ns1="http://ns1.com"/>Saat menganalisis XML di atas, nilai elemen
<NamespaceURI>
di
cuplikan kebijakan di bawah akan memvalidasi bahwa nilai URI namespace http://ns1.com
tidak lebih dari 10
karakter.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan Bulat |
<ValueLimits>/<Comment> elemen
Menentukan batas karakter untuk komentar yang ada dalam dokumen XML.
Misalnya, pertimbangkan XML berikut:
<book category="WEB"> <!-- This is a comment --> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>Saat menganalisis XML di atas, nilai elemen
<Comment>
dalam kebijakan
cuplikan di bawah ini akan memvalidasi bahwa teks komentar This is a comment
tidak melebihi
10
karakter.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan Bulat |
<ValueLimits>/<ProcessingInstructionData> elemen
Menentukan batas karakter untuk setiap teks petunjuk pemrosesan yang ada dalam XML dokumen.
Misalnya, pertimbangkan XML berikut:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>Saat menganalisis XML di atas, elemen
<ProcessingInstructionData>
dalam cuplikan kebijakan di bawah ini akan memvalidasi bahwa teks petunjuk pemrosesan
type="text/xsl" href="style.xsl"
tidak melebihi 10
karakter.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Default: | Jika Anda tidak menentukan batas, sistem akan menerapkan nilai default -1 ,
yang disamakan oleh sistem dengan
tanpa batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan Bulat |
Referensi error
Bagian ini menjelaskan kode kesalahan dan pesan kesalahan yang dikembalikan dan variabel kesalahan yang disetel oleh Edge saat kebijakan ini memicu kesalahan. Informasi ini penting untuk diketahui jika Anda mengembangkan aturan kesalahan untuk menangani kesalahan. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Penanganan kesalahan.
Error runtime
Error ini dapat terjadi saat kebijakan dijalankan.
Kode error | Status HTTP | Penyebab | Perbaiki |
---|---|---|---|
steps.xmlthreatprotection.ExecutionFailed |
500 | Kebijakan XMLThreatProtection dapat menampilkan berbagai jenis error ExecutionFailed. Sebagian besar error ini terjadi saat batas tertentu yang ditetapkan dalam kebijakan terlampaui. Ini jenis kesalahan meliputi: panjang nama elemen, jumlah turunan, kedalaman node, jumlah atribut, panjang nama atribut, dan banyak lagi. Anda dapat melihat daftar lengkap dalam topik pemecahan masalah error runtime kebijakan XMLThreatProtection. | build |
steps.xmlthreatprotection.InvalidXMLPayload |
500 |
Error ini terjadi jika payload pesan input yang ditentukan oleh elemen <Source> kebijakan XMLThreatProtection bukan Dokumen XML yang valid.
|
build |
steps.xmlthreatprotection.SourceUnavailable |
500 |
Error ini terjadi jika pesan
variabel yang ditentukan dalam elemen <Source> adalah:
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 |
Error ini terjadi jika elemen <Source> disetel ke variabel yang
bukan jenis
pesan.
|
build |
Catatan:
- Nama error ExecutionFailed adalah nama error default dan akan ditampilkan terlepas dari jenis {i>error<i} yang terdeteksi; namun, setelan default ini dapat diubah dengan mengatur sebuah properti tingkat organisasi. Jika properti ini ditetapkan, nama error akan mencerminkan {i>error<i}. Misalnya, "Text Exceeded" atau "AttrValue Exceeded". Lihat Catatan Penggunaan untuk spesifikasi pendukung.
- Defaultnya adalah status 500 HTTP; namun, Status HTTP dapat diubah menjadi 400 untuk kesalahan alur permintaan dengan menetapkan properti tingkat organisasi. Lihat Catatan Penggunaan untuk spesifikasi pendukung.
Error saat deployment
Tidak ada.
Variabel kesalahan
Variabel ini ditetapkan saat terjadi error runtime. Untuk informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.
Variabel | Di mana | Contoh |
---|---|---|
fault.name="fault_name" |
fault_name adalah nama kesalahan, seperti yang tercantum dalam tabel Error runtime di atas. Nama kesalahan adalah bagian terakhir dari kode kesalahan. | fault.name Matches "SourceUnavailable" |
xmlattack.policy_name.failed |
policy_name adalah nama kebijakan yang ditentukan pengguna yang menampilkan kesalahan. | xmlattack.XPT-SecureRequest.failed = true |
Contoh respons error
{ "fault": { "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2", "detail": { "errorcode": "steps.xmlthreatprotection.ExecutionFailed" } } }
Contoh aturan kesalahan
<FaultRule name="XML Threat Protection Policy Faults"> <Step> <Name>AM-CustomErrorResponse</Name> <Condition>(fault.name Matches "ExecutionFailed") </Condition> </Step> <Condition>(xmlattack.XPT-SecureRequest.failed = true) </Condition> </FaultRule>
Skema
Catatan penggunaan
Setiap server yang menerima data online dapat terkena serangan, baik berbahaya maupun tidak disengaja. Beberapa serangan memanfaatkan fleksibilitas XML dengan membuat dokumen tidak valid yang potensi untuk menyusupi sistem {i>back-end<i}. Dokumen XML yang rusak atau sangat kompleks dapat menyebabkan server mengalokasikan memori lebih banyak dari yang tersedia, mengikat sumber daya CPU dan memori, membuat parser error, dan secara umum menonaktifkan pemrosesan pesan serta pembuatan serangan {i>denial-of-service<i},
Konfigurasi error perlindungan ancaman
Informasi penting jika Anda membuat FaultRules untuk kebijakan ini: Dengan
secara default, Edge menampilkan kode status Error Server Internal HTTP 500 dan error ExecutionFailed
kode jika pesan tidak berhasil melewati kebijakan Perlindungan Ancaman JSON atau XML. Anda dapat mengubah
perilaku error tersebut dengan properti tingkat organisasi yang baru. Saat menetapkan organisasi
properti features.isPolicyHttpStatusEnabled
ke benar (true), hal berikut
perilaku itu terjadi:
- Permintaan: Dengan kebijakan perlindungan ancaman yang dilampirkan ke setiap alur permintaan, pesan tidak valid menampilkan kode status Permintaan Buruk 400, bersama dengan error kebijakan terkait kode (bukan hanya ExecutionFailed).
- Respons: Dengan kebijakan perlindungan ancaman yang dilampirkan ke alur respons apa pun, pesan tidak valid masih menampilkan kode status Error Server Internal 500, dan salah satu kode error kebijakan yang sesuai ditampilkan (bukan hanya ExecutionFailed).
Pelanggan Cloud harus menghubungi Dukungan Apigee Edge untuk menyetel properti organisasi.