นโยบาย 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>

แอตทริบิวต์ <JSONThreatProtection>

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

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

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

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

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

ไม่มีข้อมูล จำเป็น
continueOnError

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

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

false ไม่บังคับ
enabled

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

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

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

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

false เลิกใช้

องค์ประกอบ <DisplayName>

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

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

ไม่มีข้อมูล

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

การมีบุคคลอยู่ ไม่บังคับ
Type สตริง

องค์ประกอบ <ArrayElementCount>

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

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

องค์ประกอบ <ContainerDepth>

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

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

องค์ประกอบ <ObjectEntryCount>

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

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

องค์ประกอบ <ObjectEntryNameLength>

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

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

องค์ประกอบ <Source>

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

<Source>request</Source>
ค่าเริ่มต้น: ส่งคำขอ
สถานที่ตั้ง: ไม่บังคับ
ประเภท:

สตริง

ค่าที่ใช้ได้ ได้แก่ คำขอ การตอบกลับ หรือข้อความ

องค์ประกอบ <StringValueLength>

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

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

การอ้างอิงข้อผิดพลาด

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

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

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

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

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

ไม่มี

ตัวแปรของข้อผิดพลาด

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

ตัวแปร สถานที่ ตัวอย่าง
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>

สคีมา

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

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

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

นโยบาย JSONtoXML

นโยบาย XMLThreatProtection

นโยบาย regularExpressionProtection