Halaman ini berlaku untuk Apigee dan Apigee Hybrid.
Lihat dokumentasi
Apigee Edge.
Apa
Atasi kerentanan XML dan minimalkan serangan pada API Anda. Secara opsional, deteksi serangan payload XML berdasarkan batas yang dikonfigurasi. Lindungi dari ancaman XML menggunakan pendekatan berikut:
- Mengevaluasi konten pesan untuk mengecualikan kata kunci atau pola tertentu
- Mendeteksi pesan yang rusak atau salah format sebelum pesan tersebut diuraikan
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.
Tonton video singkat tentang perlindungan terhadap ancaman
Video: Tonton video singkat tentang kebijakan perlindungan dari ancaman dalam seri Four-minute Videos for Developers (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 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 <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 nama elemen apa pun 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 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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: | Bilangan bulat |
Elemen <NameLimits>/<Attribute>
Menentukan batas jumlah maksimum karakter yang diizinkan dalam nama atribut apa pun 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
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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: | Bilangan bulat |
Elemen <NameLimits>/<NamespacePrefix>
Menentukan batas jumlah karakter maksimum 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>
dalam
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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: | Bilangan bulat |
Elemen <NameLimits>/<ProcessingInstructionTarget>
Menentukan batas jumlah maksimum karakter 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, nilai elemen <ProcessingInstructionTarget>
dalam cuplikan kebijakan di bawah akan memvalidasi bahwa target instruksi 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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: | Bilangan bulat |
Elemen <Source>
Pesan yang akan diperiksa untuk mendeteksi serangan payload XML. 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. 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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <StructuralLimits>/<AttributeCountPerElement>
Menentukan jumlah maksimum atribut yang diizinkan untuk elemen apa pun.
Misalnya, pertimbangkan XML berikut:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<AttributeCountPerElement>
dalam cuplikan kebijakan di bawah akan memvalidasi bahwa elemen book
, title
,
author
, dan year
tidak memiliki lebih dari 2
atribut masing-masing.
Perhatikan 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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <StructuralLimits>/<NameSpaceCountPerElement>
Menentukan jumlah maksimum definisi namespace yang diizinkan untuk elemen apa pun.
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
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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
<StructuralLimits>/<ChildCount> element
Menentukan jumlah maksimum elemen turunan yang diizinkan untuk elemen apa pun.
<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 dianggap sistem sebagai tidak ada batas. |
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 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 |
Elemen <ValueLimits>/<Text>
Menentukan batas karakter untuk setiap 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>
<Text>
dalam cuplikan kebijakan di bawah akan memvalidasi bahwa nilai teks elemen Learning XML
, Erik T.
Ray,
, dan 2003
tidak melebihi 15
karakter masing-masing.
<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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <ValueLimits>/<Attribute>
Menentukan batas karakter untuk nilai atribut apa pun 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>
<Attribute>
dalam cuplikan
kebijakan di bawah 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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <ValueLimits>/<NamespaceURI>
Menentukan batas karakter untuk URI namespace yang ada dalam dokumen XML.
Misalnya, pertimbangkan XML berikut:
<ns1:myelem xmlns:ns1="http://ns1.com"/>
<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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <ValueLimits>/<Comment>
Menentukan batas karakter untuk komentar apa pun 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>
<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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Elemen <ValueLimits>/<ProcessingInstructionData>
Menentukan batas karakter untuk teks petunjuk pemrosesan yang ada dalam dokumen XML.
Misalnya, pertimbangkan XML berikut:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<ProcessingInstructionData>
dalam cuplikan kebijakan di bawah akan memvalidasi bahwa teks instruksi 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 dianggap sistem sebagai tidak ada batas. |
Kehadiran: | Opsional |
Jenis: |
Bilangan bulat |
Referensi error
Bagian ini menjelaskan kode error dan pesan error yang ditampilkan serta variabel error yang ditetapkan oleh Apigee saat kebijakan ini memicu error. Informasi ini penting untuk diketahui jika Anda mengembangkan aturan error untuk menangani error. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani error.
Error runtime
Error ini dapat terjadi saat kebijakan dijalankan.
Kode kerusakan | 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. 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 dari jenis
message.
|
build |
Error saat deployment
Tidak ada.
Variabel error
Variabel ini ditetapkan saat error runtime terjadi. Untuk mengetahui informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.
Variabel | Dari mana | Contoh |
---|---|---|
fault.name="fault_name" |
fault_name adalah nama error, seperti yang tercantum dalam tabel Runtime errors di atas. Nama error adalah bagian terakhir dari kode error. | fault.name Matches "SourceUnavailable" |
xmlattack.policy_name.failed |
policy_name adalah nama kebijakan yang ditentukan pengguna yang menampilkan error. | 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 error
<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 rentan terhadap serangan, baik yang berbahaya maupun tidak disengaja. Beberapa serangan memanfaatkan fleksibilitas XML dengan membuat dokumen tidak valid yang berpotensi membahayakan sistem backend. Dokumen XML yang rusak atau sangat kompleks dapat menyebabkan server mengalokasikan lebih banyak memori daripada yang tersedia, mengikat resource CPU dan memori, menyebabkan error pada parser, dan secara umum menonaktifkan pemrosesan pesan serta membuat serangan penolakan layanan tingkat aplikasi.
Konfigurasi error perlindungan terhadap ancaman
Informasi penting jika Anda membuat FaultRules untuk kebijakan ini: Secara
default, Apigee akan menampilkan kode status Error Server Internal HTTP 500 dan kode error ExecutionFailed
jika pesan tidak lolos dari kebijakan Perlindungan Ancaman JSON atau XML. Anda dapat mengubah
perilaku error tersebut dengan properti tingkat organisasi baru. Saat menyetel properti org
features.isPolicyHttpStatusEnabled
ke benar (true), perilaku
berikut akan terjadi:
- Permintaan: Dengan kebijakan perlindungan ancaman yang dilampirkan ke alur permintaan apa pun, pesan yang tidak valid akan menampilkan kode status 400 Bad Request, beserta kode error kebijakan yang sesuai (bukan hanya ExecutionFailed).
- Respons: Dengan kebijakan perlindungan ancaman yang dilampirkan ke alur respons apa pun, pesan yang tidak valid tetap menampilkan kode status Error Server Internal 500, dan salah satu kode error kebijakan yang sesuai akan ditampilkan (bukan hanya ExecutionFailed).
Pelanggan Cloud harus menghubungi Layanan Pelanggan Google Cloud 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 dari ancaman JSON
Kebijakan Perlindungan Ekspresi Reguler