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. Lindungi dari ancaman XML menggunakan pendekatan berikut:

  • Memvalidasi pesan berdasarkan skema XML (.xsd)
  • Mengevaluasi konten pesan untuk mengecualikan kata kunci atau pola tertentu
  • Mendeteksi pesan yang 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"> 

Tabel berikut menjelaskan atribut yang umum untuk semua elemen induk kebijakan:

Atribut Deskripsi Default Ketersediaan
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.

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

T/A Wajib
continueOnError

Tetapkan ke false untuk menampilkan error saat kebijakan gagal. Diharapkan untuk sebagian besar kebijakan.

Setel ke true agar eksekusi alur dapat dilanjutkan bahkan setelah kebijakan gagal.

salah Opsional
enabled

Setel ke true untuk menerapkan kebijakan.

Setel ke false untuk menonaktifkan kebijakan. Kebijakan ini tidak akan ditegakkan meskipun tetap terikat pada alur.

true Opsional
async

Atribut ini tidak digunakan lagi.

salah Tidak digunakan lagi

&lt;DisplayName&gt; 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 name kebijakan akan menjadi data

Ketersediaan 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 maksimum karakter 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 disamakan dengan tidak ada batas oleh sistem.
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 disamakan dengan tidak ada batas oleh sistem.
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 disamakan dengan tidak ada batas oleh sistem.
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 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 dengan tidak ada batas oleh sistem.
Kehadiran: Opsional
Jenis: Bilangan bulat

Elemen <Source>

Pesan yang akan diperiksa untuk mendeteksi serangan payload XML. Biasanya, nilai 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: minta
Kehadiran: Opsional
Jenis:

String.

Pilih dari request, response, atau message.

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 disamakan dengan tidak ada batas oleh sistem.
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>
Saat menganalisis XML di atas, nilai elemen <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 disamakan dengan tidak ada batas oleh sistem.
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 disamakan dengan tidak ada batas oleh sistem.
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 disamakan dengan tidak ada batas oleh sistem.
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 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 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 disamakan dengan tidak ada batas oleh sistem.
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 disamakan dengan tidak ada batas oleh sistem.
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"/>
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 disamakan dengan tidak ada batas oleh sistem.
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>
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 disamakan dengan tidak ada batas oleh sistem.
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"?>
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 disamakan dengan tidak ada batas oleh sistem.
Kehadiran: Opsional
Jenis:

Bilangan bulat

Referensi error

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.xmlthreatprotection.ExecutionFailed 500 The XMLThreatProtection policy can throw many different types of ExecutionFailed errors. Most of these errors occur when a specific threshold set in the policy is exceeded. These types of errors include: element name length, child count, node depth, attribute count, attribute name length, and many others. You can see the complete list in the XMLThreatProtection policy runtime error troubleshooting topic.
steps.xmlthreatprotection.InvalidXMLPayload 500 This error occurs if the input message payload specified by the XMLThreatProtection policy's <Source> element is not a valid XML Document.
steps.xmlthreatprotection.SourceUnavailable 500 This error occurs if the message variable specified in the <Source> element is either:
  • Out of scope (not available in the specific flow where the policy is being executed)
  • Is not one of the valid values request, response, or message
steps.xmlthreatprotection.NonMessageVariable 500 This error occurs if the <Source> element is set to a variable which is not of type message.

Notes:

  • The error name ExecutionFailed is the default error name and will be returned regardless of the type of error detected; however, this default can be changed by setting an organization-level property. When this property is set, the error name will reflect the actual error. For example, "TextExceeded" or "AttrValueExceeded". See Usage Notes for details.
  • The 500 HTTP status is the default; however, the HTTP Status can be changed to 400 for request flow faults by setting an organization-level property. See Usage Notes for details.

Deployment errors

None.

Fault variables

These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "SourceUnavailable"
xmlattack.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. xmlattack.XPT-SecureRequest.failed = true

Example error response

{
  "fault": {
    "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2",
    "detail": {
      "errorcode": "steps.xmlthreatprotection.ExecutionFailed"
    }
  }
}

Example fault rule

<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, Edge akan menampilkan kode status HTTP 500 Internal Server Error 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 yang 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 500 Internal Server Error, dan salah satu kode error kebijakan yang sesuai akan ditampilkan (bukan hanya ExecutionFailed).

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

Topik terkait

Kebijakan perlindungan terhadap Ancaman JSON

Kebijakan Perlindungan Ekspresi Reguler