นโยบาย JSONThreatProtection

คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่ เอกสารประกอบเกี่ยวกับ Apigee X.
ข้อมูล

อะไร

ลดความเสี่ยงที่เกิดจากการโจมตีระดับเนื้อหา โดยให้คุณระบุขีดจำกัดสำหรับ โครงสร้าง JSON เช่น อาร์เรย์และสตริง

วิดีโอ: ดูวิดีโอสั้นๆ เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการทำงานของ นโยบาย JSONThreatProtection ช่วยให้คุณรักษาความปลอดภัยของ API จากการโจมตีระดับเนื้อหา

วิดีโอ: ลองดูวิดีโอสั้นนี้เกี่ยวกับแพลตฟอร์ม API แบบข้ามระบบคลาวด์ของ Apigee

การอ้างอิงองค์ประกอบ

การอ้างอิงองค์ประกอบอธิบายองค์ประกอบและแอตทริบิวต์ของ JSONThreatProtection

<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
   <DisplayName>JSONThreatProtection 1</DisplayName>
   <ArrayElementCount>20</ArrayElementCount>
   <ContainerDepth>10</ContainerDepth>
   <ObjectEntryCount>15</ObjectEntryCount>
   <ObjectEntryNameLength>50</ObjectEntryNameLength>
   <Source>request</Source>
   <StringValueLength>500</StringValueLength>
</JSONThreatProtection>

&lt;JSONThreatProtection&gt; แอตทริบิวต์

<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1"> 

ตารางต่อไปนี้อธิบายแอตทริบิวต์ทั่วไปในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
name

ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ name สามารถ ประกอบด้วยตัวอักษร ตัวเลข การเว้นวรรค ขีดกลางสั้น ขีดล่าง และจุด ค่านี้ไม่สามารถ เกิน 255 อักขระ

(ไม่บังคับ) ใช้องค์ประกอบ <DisplayName> เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

ไม่มี ต้องระบุ
continueOnError

ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว เป็นเรื่องปกติ พฤติกรรมสำหรับนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้ดำเนินการตามขั้นตอนได้อย่างต่อเนื่องแม้จะมีนโยบายแล้วก็ตาม ล้มเหลว

เท็จ ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อปิดนโยบาย นโยบายจะไม่ บังคับใช้ แม้ว่าจะยังคงแนบกับขั้นตอน

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

เท็จ เลิกใช้

&lt;DisplayName&gt; องค์ประกอบ

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มี

หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ name ของนโยบายจะเป็น

การมีบุคคลอยู่ ไม่บังคับ
ประเภท สตริง

&lt;ArrayElementCount&gt; องค์ประกอบ

ระบุจำนวนองค์ประกอบสูงสุดที่อนุญาตในอาร์เรย์

<ArrayElementCount>20</ArrayElementCount>
ค่าเริ่มต้น: หากคุณไม่ระบุองค์ประกอบนี้ หรือถ้าคุณระบุจำนวนเต็มลบ ระบบจะ ไม่บังคับใช้ขีดจำกัด
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: จำนวนเต็ม

&lt;ContainerDepth&gt; องค์ประกอบ

ระบุความลึกสูงสุดของการกักเก็บที่อนุญาต โดยที่คอนเทนเนอร์เป็นออบเจ็กต์หรืออาร์เรย์ เช่น อาร์เรย์ที่มีออบเจ็กต์หนึ่งซึ่งมีออบเจ็กต์อยู่จะทำให้เกิดการควบคุม ความลึก 3

<ContainerDepth>10</ContainerDepth>
ค่าเริ่มต้น: หากคุณไม่ระบุองค์ประกอบนี้ หรือถ้าคุณระบุจำนวนเต็มลบ ระบบจะ ไม่บังคับใช้ขีดจำกัดใดๆ
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: จำนวนเต็ม

&lt;ObjectEntryCount&gt; องค์ประกอบ

ระบุจำนวนรายการสูงสุดที่อนุญาตในออบเจ็กต์

<ObjectEntryCount>15</ObjectEntryCount>
ค่าเริ่มต้น: หากคุณไม่ระบุองค์ประกอบนี้ หรือถ้าคุณระบุจำนวนเต็มลบ ระบบจะ ไม่บังคับใช้ขีดจำกัดใดๆ
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: จำนวนเต็ม

&lt;ObjectEntryNameLength&gt; องค์ประกอบ

ระบุความยาวสตริงสูงสุดที่อนุญาตสำหรับชื่อพร็อพเพอร์ตี้ภายในออบเจ็กต์

<ObjectEntryNameLength>50</ObjectEntryNameLength>
ค่าเริ่มต้น: หากคุณไม่ระบุองค์ประกอบนี้ หรือถ้าคุณระบุจำนวนเต็มลบ ระบบจะ ไม่บังคับใช้ขีดจำกัด
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: จำนวนเต็ม

&lt;Source&gt; องค์ประกอบ

ข้อความที่จะคัดกรองการโจมตีเพย์โหลด JSON โดยทั่วไปจะตั้งค่าเป็น request เนื่องจากโดยปกติแล้วคุณจะต้องตรวจสอบคำขอขาเข้าจากแอปไคลเอ็นต์ เมื่อตั้งค่าเป็น message องค์ประกอบนี้จะประเมินข้อความคำขอโดยอัตโนมัติ เมื่อแนบไปกับขั้นตอนคำขอและข้อความตอบกลับเมื่อแนบมากับการตอบกลับ

<Source>request</Source>
ค่าเริ่มต้น: ส่งคำขอ
การตรวจหาบุคคล: ไม่บังคับ
ประเภท:

สตริง

ค่าที่ใช้ได้ ได้แก่ request,response หรือข้อความ

&lt;StringValueLength&gt; องค์ประกอบ

ระบุความยาวสูงสุดที่อนุญาตสำหรับค่าสตริง

<StringValueLength>500</StringValueLength>
ค่าเริ่มต้น: หากคุณไม่ระบุองค์ประกอบนี้ หรือถ้าคุณระบุจำนวนเต็มลบ ระบบจะ ไม่บังคับใช้ขีดจำกัด
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: จำนวนเต็ม

ข้อมูลอ้างอิงข้อผิดพลาด

ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงกลับมา และตัวแปรข้อผิดพลาดที่ Edge ตั้งค่าไว้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้มีความสำคัญต่อการทราบว่าคุณจะสร้างกฎความผิดพลาดเพื่อ จัดการกับข้อผิดพลาด หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่สิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการ ข้อผิดพลาด

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน

รหัสข้อผิดพลาด สถานะ HTTP สาเหตุ แก้ไข
steps.jsonthreatprotection.ExecutionFailed 500 นโยบาย JSONThreatProtection สามารถแสดงข้อผิดพลาด ExecutionFailed หลายประเภท ข้อผิดพลาดเหล่านี้ส่วนใหญ่เกิดขึ้นเมื่อเกินเกณฑ์ที่กำหนดไว้ในนโยบาย เหล่านี้ ประเภทของข้อผิดพลาดมีดังนี้ ความยาวของชื่อรายการออบเจ็กต์ จำนวนรายการออบเจ็กต์ จำนวนองค์ประกอบของอาร์เรย์ ความลึกของคอนเทนเนอร์ ความยาวของค่าสตริงสตริง ข้อผิดพลาดนี้ยังเกิดขึ้นเมื่อเพย์โหลดมีออบเจ็กต์ JSON ที่ไม่ถูกต้อง
steps.jsonthreatprotection.SourceUnavailable 500 ข้อผิดพลาดนี้จะเกิดขึ้นหากข้อความ ตัวแปรที่ระบุในองค์ประกอบ <Source> มีดังนี้
  • อยู่นอกขอบเขต (ใช้ไม่ได้ในขั้นตอนที่เจาะจงที่กำลังบังคับใช้นโยบาย)
  • ไม่ใช่หนึ่งในค่าที่ถูกต้อง request, response, หรือ message
steps.jsonthreatprotection.NonMessageVariable 500 ข้อผิดพลาดนี้เกิดขึ้นหากองค์ประกอบ <Source> ได้รับการตั้งค่าเป็นตัวแปรที่ ไม่ใช่ประเภท message

ข้อผิดพลาดในการทำให้ใช้งานได้

ไม่มี

ตัวแปรความผิดพลาด

ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทำให้เกิดข้อผิดพลาด โปรดดูข้อมูลเพิ่มเติมที่หัวข้อสิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบาย

ตัวแปร สถานที่ ตัวอย่าง
fault.name="fault_name" fault_name คือชื่อของข้อผิดพลาดตามที่ระบุไว้ในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของรหัสข้อผิดพลาด fault.name Matches "SourceUnavailable"
jsonattack.policy_name.failed policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นสาเหตุของข้อผิดพลาด jsonattack.JTP-SecureRequest.failed = true

ตัวอย่างการตอบสนองข้อผิดพลาด

{
  "fault": {
    "faultstring": "JSONThreatProtection[JPT-SecureRequest]: Execution failed. reason: JSONThreatProtection[JTP-SecureRequest]: Exceeded object entry name length at line 2",
    "detail": {
      "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
    }
  }
}

ตัวอย่างกฎข้อผิดพลาด

<FaultRule name="JSONThreatProtection Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ExecutionFailed") </Condition>
    </Step>
    <Condition>(jsonattack.JPT-SecureRequest.failed = true) </Condition>
</FaultRule>

สคีมา

หมายเหตุการใช้งาน

เช่นเดียวกับบริการที่ใช้ XML API ที่รองรับสัญลักษณ์ออบเจ็กต์ของ JavaScript (JSON) จะมีช่องโหว่ที่ รวมถึงการโจมตีระดับเนื้อหา การโจมตี JSON แบบง่ายจะพยายามใช้โครงสร้างที่ทำให้โปรแกรมแยกวิเคราะห์ JSON ทำงานหนักเกินไป ที่จะทำให้บริการขัดข้องและก่อให้เกิดการโจมตีแบบปฏิเสธการให้บริการในระดับแอปพลิเคชัน การตั้งค่าทั้งหมด เป็นตัวเลือกและควรปรับให้เหมาะสมเพื่อเพิ่มประสิทธิภาพข้อกำหนดของบริการตาม ช่องโหว่

หัวข้อที่เกี่ยวข้อง

นโยบาย JSONtoXML

นโยบาย XMLThreatProtection

นโยบาย regularExpressionProtection