Kebijakan XMLThreatProtection

Halaman ini berlaku untuk Apigee dan Apigee hybrid.

Lihat Dokumentasi Apigee Edge.

ikon kebijakan

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:

  • Evaluasi isi pesan untuk menemukan kata kunci atau pola tertentu yang akan dikecualikan
  • Deteksi pesan yang rusak atau salah format sebelum pesan tersebut diuraikan

Kebijakan ini merupakan Kebijakan yang dapat diperluas dan penggunaan kebijakan ini mungkin menimbulkan biaya atau implikasi penggunaan, bergantung pada lisensi Apigee Anda. Untuk mengetahui informasi tentang jenis kebijakan dan implikasi penggunaan, lihat Jenis kebijakan.

Tonton video singkat tentang perlindungan ancaman

Video: Tonton video singkat tentang kebijakan perlindungan ancaman dari Seri Video untuk Developer (4MV4D) berdurasi empat menit.

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>

&lt;XMLThreatProtection&gt; atribut

<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 name dapat berisi huruf, angka, spasi, tanda hubung, garis bawah, dan titik. Nilai ini tidak boleh melebihi 255 karakter.

Atau, gunakan elemen <DisplayName> untuk memberi label kebijakan di editor proxy UI pengelolaan dengan nama natural-language yang berbeda.

T/A Diperlukan
continueOnError

Setel ke false untuk menampilkan error jika kebijakan gagal. Ini adalah perilaku yang wajar untuk sebagian besar kebijakan.

Setel ke true agar eksekusi alur tetap berlanjut bahkan setelah kebijakan gagal. Lihat juga:

false Opsional
enabled

Setel ke true untuk menerapkan kebijakan.

Setel ke false untuk menonaktifkan kebijakan. Kebijakan tidak akan diterapkan meskipun tetap melekat pada alur.

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 name kebijakan akan digunakan.

Kehadiran Opsional
Jenis String

&lt;NameLimits&gt; 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

&lt;NameLimits&gt;/&lt;Element&gt; 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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis: Bilangan bulat

&lt;NameLimits&gt;/&lt;Attribute&gt; 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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis: Bilangan bulat

&lt;NameLimits&gt;/&lt;NamespacePrefix&gt; 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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis: Bilangan bulat

&lt;NameLimits&gt;/&lt;ProcessingInstructionTarget&gt; 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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis: Bilangan bulat

&lt;Source&gt; 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: permintaan
Kehadiran: Opsional
Jenis:

String.

Pilih dari request, response, atau message.

&lt;StructuralLimits&gt; 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

&lt;StructuralLimits&gt;/&lt;NodeDepth&gt; 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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis:

Bilangan bulat

&lt;StructuralLimits&gt;/&lt;AttributeCountPerElement&gt; 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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis:

Bilangan bulat

&lt;StructuralLimits&gt;/&lt;NameSpaceCountPerElement&gt; 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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis:

Bilangan bulat

&lt;StructuralLimits&gt;/&lt;ChildCount&gt; 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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis:

Bilangan bulat

Atribut

Atribut Default Kehadiran
includeComment benar Opsional
includeElement benar Opsional
includeProcessingInstructions benar Opsional
includeText benar Opsional

&lt;ValueLimits&gt; 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

&lt;ValueLimits&gt;/&lt;Text&gt; elemen

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>
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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis:

Bilangan bulat

&lt;ValueLimits&gt;/&lt;Attribute&gt; 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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis:

Bilangan bulat

&lt;ValueLimits&gt;/&lt;NamespaceURI&gt; 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 kolom 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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis:

Bilangan bulat

&lt;ValueLimits&gt;/&lt;Comment&gt; 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, di mana sistem disamakan dengan tanpa batas.
Kehadiran: Opsional
Jenis:

Bilangan bulat

&lt;ValueLimits&gt;/&lt;ProcessingInstructionData&gt; 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, di mana sistem disamakan dengan tanpa batas.
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.
steps.xmlthreatprotection.InvalidXMLPayload 500 Error ini terjadi jika payload pesan input yang ditentukan oleh elemen <Source> kebijakan XMLThreatProtection bukan Dokumen XML yang valid.
steps.xmlthreatprotection.SourceUnavailable 500 Error ini terjadi jika variabel message yang ditentukan dalam elemen <Source> adalah:
  • Di luar cakupan (tidak tersedia di alur spesifik tempat kebijakan sedang dijalankan)
  • Bukan salah satu dari nilai request, response, atau message yang valid
steps.xmlthreatprotection.NonMessageVariable 500 Error ini terjadi jika elemen <Source> ditetapkan ke variabel yang bukan jenis pesan.

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

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, Apigee 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 Google Cloud Customer Care 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

Ancaman JSON Kebijakan perlindungan

Reguler Kebijakan Perlindungan Ekspresi