Kebijakan XMLThreatProtection

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

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:

  • Memvalidasi pesan terhadap skema XML (.xsd)
  • Mengevaluasi konten pesan untuk kata kunci atau pola tertentu yang akan dikecualikan
  • Mendeteksi pesan rusak atau salah format sebelum pesan tersebut diuraikan

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"> 

The following table describes attributes that are common to all policy parent elements:

Attribute Description Default Presence
name

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

N/A Required
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails.

false Optional
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

true Optional
async

This attribute is deprecated.

false Deprecated

<DisplayName> element

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, natural-language name.

<DisplayName>Policy Display Name</DisplayName>
Default

N/A

If you omit this element, the value of the policy's name attribute is used.

Presence Optional
Type 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 oleh sistem tidak memiliki batas.
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 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 oleh sistem tidak memiliki batas.
Kehadiran: Opsional
Jenis: Bilangan Bulat

Elemen <NameLimits>/<NamespacePrefix>

Menentukan batas jumlah karakter maksimum yang diizinkan dalam 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 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 oleh sistem tidak memiliki batas.
Kehadiran: Opsional
Jenis: Bilangan Bulat

Elemen <NameLimits>/<ProcessingImplementionTarget>

Menentukan batas jumlah karakter maksimum yang diizinkan pada target dari petunjuk pemrosesan apa pun 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 oleh sistem tidak memiliki batas.
Kehadiran: Opsional
Jenis: Bilangan Bulat

Elemen <Source>

Pesan yang akan diperiksa 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: minta
Kehadiran: Opsional
Jenis:

String.

Pilih dari request, response, atau message.

Elemen <StructuralLimits>

Menentukan batas struktural yang akan diperiksa dan ditegakkan 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 oleh sistem tidak memiliki batas.
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 elemen book, title, author, dan year masing-masing tidak memiliki lebih dari 2. 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 oleh sistem tidak memiliki batas.
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 oleh sistem tidak memiliki batas.
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 oleh sistem tidak memiliki batas.
Kehadiran: Opsional
Jenis:

Bilangan Bulat

Atribut

Atribut Default Ketersediaan
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 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 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 oleh sistem tidak memiliki 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>
Saat menganalisis XML di atas, nilai elemen <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 oleh sistem tidak memiliki batas.
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 oleh sistem tidak memiliki batas.
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 oleh sistem tidak memiliki batas.
Kehadiran: Opsional
Jenis:

Bilangan Bulat

Elemen <ValueLimits>/<ProcessingImplementionData>

Menentukan batas karakter untuk 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 oleh sistem tidak memiliki batas.
Kehadiran: Opsional
Jenis:

Bilangan Bulat

Referensi error

Bagian ini menjelaskan kode kesalahan dan pesan error yang ditampilkan dan variabel kesalahan yang disetel oleh Edge 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 Perbaiki
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.

Notes:

  • Nama error ExecutionFailed adalah nama error default dan akan ditampilkan terlepas dari jenis error yang terdeteksi. Namun, default ini dapat diubah dengan menyetel properti tingkat organisasi. Jika properti ini ditetapkan, nama error akan mencerminkan error yang sebenarnya. Misalnya, "TextExeced" atau "AttrValueSuccessed". Lihat Catatan Penggunaan untuk mengetahui detailnya.
  • Status HTTP 500 adalah default; namun, Status HTTP dapat diubah menjadi 400 untuk kesalahan alur permintaan dengan menyetel properti tingkat organisasi. Lihat Catatan Penggunaan untuk mengetahui detailnya.

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 mengalami serangan, baik 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 secara umum menonaktifkan pemrosesan pesan serta menimbulkan serangan denial-of-service di level aplikasi.

Konfigurasi error perlindungan terhadap ancaman

Informasi penting jika Anda membuat FaultRules untuk kebijakan ini: Secara default, Edge akan menampilkan kode status Error Server Internal HTTP 500 dan kode error ExecutionFailed jika pesan tidak melewati kebijakan JSON atau XML Threat Protection. Anda dapat mengubah perilaku error tersebut dengan properti tingkat organisasi baru. Jika 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 menampilkan kode status Permintaan 400 Buruk, beserta kode error kebijakan yang terkait (bukan hanya ExecutionFailed).
  • Respons: Dengan kebijakan perlindungan ancaman yang terpasang pada alur respons apa pun, pesan yang tidak valid tetap menampilkan kode status Error Server Internal 500, dan salah satu kode error kebijakan yang terkait akan ditampilkan (bukan hanya ExecutionFailed).

Pelanggan cloud harus menghubungi Dukungan Apigee Edge untuk menetapkan properti organisasi.

Topik terkait

Kebijakan Perlindungan Ancaman JSON

Kebijakan Perlindungan Ekspresi Reguler