Halaman ini berlaku untuk Apigee dan Apigee Hybrid.
Baca dokumentasi Apigee Edge.
Apa
Atasi kerentanan XML dan minimalkan serangan pada API Anda. Secara opsional, deteksi serangan payload XML berdasarkan batas yang dikonfigurasi. Saring ancaman XML menggunakan pendekatan berikut:
- Evaluasi konten pesan untuk kata kunci atau pola tertentu yang akan dikecualikan
- Mendeteksi pesan yang rusak atau salah format sebelum pesan tersebut diuraikan
Kebijakan ini merupakan Kebijakan yang dapat diperluas, dan penggunaan kebijakan ini mungkin memiliki implikasi biaya atau pemanfaatan, bergantung pada lisensi Apigee Anda. Untuk mengetahui informasi tentang jenis kebijakan dan implikasi penggunaan, lihat Jenis kebijakan.
Tonton video singkat tentang perlindungan terhadap ancaman
Video: Tonton video singkat tentang kebijakan perlindungan terhadap ancaman dari serial Video untuk Developer selama Empat menit (4MV4D).
Referensi elemen
Referensi elemen menjelaskan elemen dan atribut kebijakan XMLThreatProtection.
<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>
Atribut <XMLThreatProtection>
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1">
Tabel berikut menjelaskan atribut yang sama untuk semua elemen induk kebijakan:
Atribut | Deskripsi | Default | Kehadiran |
---|---|---|---|
name |
Nama internal kebijakan. Nilai atribut Atau, gunakan elemen |
T/A | Diperlukan |
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 |
---|---|
Kehadiran | Opsional |
Jenis | String |
Elemen <NameLimits>
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 |
Elemen <NameLimits>/<Element>
Menentukan batas jumlah karakter maksimum yang diizinkan dalam setiap nama elemen 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 <Element>
dalam cuplikan kebijakan di bawah akan memvalidasi bahwa nama elemen (book
, title
, author
, dan year)
tidak melebihi karakter 10
.
<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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: | Bilangan bulat |
Elemen <NameLimits>/<Attribute>
Menentukan batas jumlah karakter maksimum yang diizinkan dalam setiap nama atribut 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 cuplikan kebijakan di bawah akan memvalidasi bahwa nama atribut category
tidak melebihi karakter 10
.
<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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: | Bilangan bulat |
Elemen <NameLimits>/<NamespacePrefix>
Menentukan batas jumlah karakter maksimum yang diizinkan pada awalan namespace dalam dokumen XML.
Misalnya, pertimbangkan XML berikut:
<ns1:myelem xmlns:ns1="http://ns1.com"/>
Saat menganalisis XML di atas, nilai elemen <NamespacePrefix>
dalam
cuplikan kebijakan di bawah akan memvalidasi bahwa awalan namespace ns1
tidak melebihi
karakter 10
.
<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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: | Bilangan bulat |
Elemen <NameLimits>/<ProcessingInformationTarget>
Menentukan batas jumlah karakter maksimum yang diizinkan pada target dari setiap petunjuk pemrosesan dalam dokumen XML.
Misalnya, pertimbangkan XML berikut:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
Saat menganalisis XML di atas, nilai elemen
<ProcessingInstructionTarget>
dalam cuplikan kebijakan di bawah 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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: | Bilangan bulat |
Elemen <Source>
Pesan yang akan disaring untuk serangan payload XML. Nilai ini paling sering ditetapkan ke
request
, karena Anda biasanya harus memvalidasi permintaan masuk dari aplikasi klien.
Jika ditetapkan 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. Pilih dari |
Elemen <StructuralLimits>
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 |
Elemen <StructuralLimits>/<NodeDepth>
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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <StructuralLimits>/<AttributeCountPerElement>
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 akan memvalidasi bahwa setiap elemen book
, title
,
author
, dan year
tidak memiliki lebih dari 2
atribut masing-masing.
Perlu diperhatikan 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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <StructuralLimits>/<NameSpaceCountPerElement>
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 definisi
namespace: 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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <StructuralLimits>/<ChildCount>
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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Atribut
Atribut | Default | Kehadiran |
---|---|---|
includeComment | true | Opsional |
includeElement | true | Opsional |
includeProcessingInstructions | true | Opsional |
includeText | true | Opsional |
Elemen <ValueLimits>
Menentukan batas karakter agar nilai 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 |
Elemen <ValueLimits>/<Text>
Menentukan batas karakter untuk setiap node teks yang ada 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
<Text>
dalam cuplikan kebijakan di bawah akan memvalidasi bahwa nilai teks elemen Learning XML
, Erik T.
Ray,
, dan 2003
masing-masing tidak melebihi karakter 15
.
<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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <ValueLimits>/<Attribute>
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 cuplikan
kebijakan 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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <ValueLimits>/<NamespaceURI>
Menentukan batas karakter untuk URI namespace apa pun yang ada di dokumen XML.
Misalnya, pertimbangkan XML berikut:
<ns1:myelem xmlns:ns1="http://ns1.com"/>Saat menganalisis XML di atas, nilai elemen
<NamespaceURI>
dalam
cuplikan kebijakan di bawah akan memvalidasi bahwa nilai URI namespace http://ns1.com
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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <ValueLimits>/<Comment>
Menentukan batas karakter untuk setiap 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 cuplikan kebijakan di bawah 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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <ValueLimits>/<ProcessingInstructionsionData>
Menentukan batas karakter untuk setiap teks petunjuk pemrosesan yang ada dalam dokumen XML.
Misalnya, pertimbangkan XML berikut:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>Saat menganalisis XML di atas, nilai elemen
<ProcessingInstructionData>
dalam cuplikan kebijakan di bawah 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 setara dengan tanpa batas oleh sistem. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Referensi error
Bagian ini menjelaskan kode kesalahan dan pesan error yang ditampilkan dan variabel kesalahan yang disetel oleh Apigee saat kebijakan ini memicu error. Informasi ini penting untuk diketahui apakah Anda mengembangkan aturan kesalahan untuk menangani kesalahan. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani kesalahan.
Error runtime
Error ini dapat terjadi saat kebijakan dieksekusi.
Kode kesalahan | Status HTTP | Penyebab | Perbaikan |
---|---|---|---|
steps.xmlthreatprotection.ExecutionFailed |
500 |
Kebijakan XMLThreatProtection dapat menampilkan berbagai jenis error ExecutionFailed .
Sebagian besar error ini terjadi saat nilai minimum tertentu yang ditetapkan dalam kebijakan terlampaui. Jenis
error ini mencakup:
panjang nama elemen,
jumlah turunan,
kedalaman node,
jumlah atribut,
panjang nama atribut,
dan banyak lagi. Anda dapat melihat daftar lengkapnya di 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 variabel message
yang ditentukan dalam elemen <Source> adalah:
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 |
Error ini terjadi jika elemen <Source> ditetapkan ke variabel yang
bukan jenis
pesan.
|
build |
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 | Dari 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
Server apa pun yang menerima data online dapat diserang, baik yang berbahaya maupun tidak disengaja. Beberapa serangan memanfaatkan fleksibilitas XML dengan membuat dokumen tidak valid yang berpotensi membahayakan sistem back-end. Dokumen XML yang rusak atau sangat kompleks dapat menyebabkan server mengalokasikan lebih banyak memori daripada yang tersedia, membatasi resource CPU dan memori, membuat parser error, dan umumnya menonaktifkan pemrosesan pesan serta membuat serangan denial-of-service tingkat aplikasi.
Konfigurasi error perlindungan terhadap ancaman
Informasi penting jika Anda membuat FaultRules untuk kebijakan ini: Secara default, Apigee menampilkan kode status Error Server Internal HTTP 500 dan kode error ExecutionFailed 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 properti
org features.isPolicyHttpStatusEnabled
ke benar (true), perilaku
berikut akan terjadi:
- Permintaan: Dengan kebijakan perlindungan ancaman yang disertakan pada alur permintaan apa pun, pesan yang tidak valid akan menampilkan kode status Permintaan 400 Buruk, bersama dengan kode error kebijakan yang sesuai (bukan hanya ExecutionFailed).
- Respons: Dengan kebijakan perlindungan ancaman yang disertakan ke alur respons apa pun, pesan yang 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 untuk menetapkan properti organisasi.
curl -u email:password -X POST -H "Content-type:application/xml" http://host:8080/v1/o/myorg -d \ "<Organization type="trial" name="MyOrganization"> <Environments/> <Properties> <Property name="features.isPolicyHttpStatusEnabled">true</Property> ... </Properties> </Organization>"
Topik terkait
Kebijakan Perlindungan Ancaman JSON
Kebijakan Perlindungan Ekspresi Reguler