คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
อะไร
ลดความเสี่ยงที่เกิดจากการโจมตีระดับเนื้อหาด้วยการให้คุณระบุขีดจำกัดของโครงสร้าง 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 |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มี | ต้องระบุ |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
เท็จ | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
เท็จ | เลิกใช้ |
<DisplayName> องค์ประกอบ
ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน
เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน
<DisplayName>Policy Display Name</DisplayName>
| ค่าเริ่มต้น |
ไม่มี หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ |
|---|---|
| การมีบุคคลอยู่ | ไม่บังคับ |
| ประเภท | สตริง |
องค์ประกอบ <ArrayElementCount>
ระบุจำนวนองค์ประกอบสูงสุดที่อนุญาตในอาร์เรย์
<ArrayElementCount>20</ArrayElementCount>
| ค่าเริ่มต้น: | หากคุณไม่ได้ระบุองค์ประกอบนี้ หรือระบุจำนวนเต็มที่เป็นค่าลบ ระบบ ไม่บังคับใช้ขีดจำกัด |
| การแสดงผล: | ไม่บังคับ |
| ประเภท: | จำนวนเต็ม |
องค์ประกอบ <ContainerDepth>
ระบุความลึกของการบรรจุสูงสุดที่อนุญาต โดยคอนเทนเนอร์จะเป็นออบเจ็กต์หรืออาร์เรย์ ตัวอย่างเช่น อาร์เรย์ที่มีออบเจ็กต์ซึ่งมีออบเจ็กต์จะทำให้ความลึกของการบรรจุเป็น 3
<ContainerDepth>10</ContainerDepth>
| ค่าเริ่มต้น: | หากคุณไม่ได้ระบุองค์ประกอบนี้ หรือระบุจำนวนเต็มที่เป็นค่าลบ ระบบ ไม่บังคับใช้ขีดจำกัด |
| การแสดงผล: | ไม่บังคับ |
| ประเภท: | จำนวนเต็ม |
องค์ประกอบ <ObjectEntryCount>
ระบุจำนวนรายการสูงสุดที่อนุญาตในออบเจ็กต์
<ObjectEntryCount>15</ObjectEntryCount>
| ค่าเริ่มต้น: | หากคุณไม่ได้ระบุองค์ประกอบนี้ หรือระบุจำนวนเต็มที่เป็นค่าลบ ระบบ ไม่บังคับใช้ขีดจำกัด |
| การแสดงผล: | ไม่บังคับ |
| ประเภท: | จำนวนเต็ม |
องค์ประกอบ <ObjectEntryNameLength>
ระบุความยาวสตริงสูงสุดที่อนุญาตสำหรับชื่อพร็อพเพอร์ตี้ภายในออบเจ็กต์
<ObjectEntryNameLength>50</ObjectEntryNameLength>
| ค่าเริ่มต้น: | หากคุณไม่ได้ระบุองค์ประกอบนี้ หรือระบุจำนวนเต็มที่เป็นค่าลบ ระบบ ไม่บังคับใช้ขีดจำกัด |
| การแสดงผล: | ไม่บังคับ |
| ประเภท: | จำนวนเต็ม |
องค์ประกอบ <Source>
ข้อความที่จะคัดกรองการโจมตีเพย์โหลด JSON โดยส่วนใหญ่มักจะตั้งค่าเป็น
request เนื่องจากโดยปกติแล้วคุณจะต้องตรวจสอบคำขอขาเข้าจากแอปของไคลเอ็นต์
เมื่อตั้งค่าเป็น message องค์ประกอบนี้จะประเมินข้อความคำขอโดยอัตโนมัติ
เมื่อแนบกับโฟลว์คำขอ และประเมินข้อความการตอบกลับเมื่อแนบกับโฟลว์การตอบกลับ
<Source>request</Source>
| ค่าเริ่มต้น: | request |
| การแสดงผล: | ไม่บังคับ |
| ประเภท: |
สตริง ค่าที่ใช้ได้ ได้แก่ request, response หรือ message |
องค์ประกอบ <StringValueLength>
ระบุความยาวสูงสุดที่อนุญาตสำหรับค่าสตริง
<StringValueLength>500</StringValueLength>
| ค่าเริ่มต้น: | หากคุณไม่ได้ระบุองค์ประกอบนี้ หรือระบุจำนวนเต็มที่เป็นค่าลบ ระบบ ไม่บังคับใช้ขีดจำกัด |
| การแสดงผล: | ไม่บังคับ |
| ประเภท: | จำนวนเต็ม |
ข้อมูลอ้างอิงข้อผิดพลาด
ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงกลับมา และตัวแปรข้อผิดพลาดที่ Edge ตั้งค่าไว้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้มีความสำคัญต่อการทราบว่าคุณจะสร้างกฎความผิดพลาดเพื่อ จัดการกับข้อผิดพลาด หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่สิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการ ข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
| รหัสข้อผิดพลาด | สถานะ HTTP | สาเหตุ | แก้ไข |
|---|---|---|---|
steps.jsonthreatprotection.ExecutionFailed |
500 | นโยบาย JSONThreatProtection สามารถแสดงข้อผิดพลาด ExecutionFailed หลายประเภท ข้อผิดพลาดเหล่านี้ส่วนใหญ่เกิดขึ้นเมื่อเกินเกณฑ์ที่กำหนดไว้ในนโยบาย เหล่านี้ ประเภทของข้อผิดพลาดมีดังนี้ ความยาวของชื่อรายการออบเจ็กต์ จำนวนรายการออบเจ็กต์ จำนวนองค์ประกอบของอาร์เรย์ ความลึกของคอนเทนเนอร์ ความยาวของค่าสตริงสตริง ข้อผิดพลาดนี้ยังเกิดขึ้นเมื่อเพย์โหลดมีออบเจ็กต์ JSON ที่ไม่ถูกต้อง | build |
steps.jsonthreatprotection.SourceUnavailable |
500 |
ข้อผิดพลาดนี้จะเกิดขึ้นหากข้อความ
ตัวแปรที่ระบุในองค์ประกอบ <Source> มีดังนี้
|
build |
steps.jsonthreatprotection.NonMessageVariable |
500 |
ข้อผิดพลาดนี้เกิดขึ้นหากองค์ประกอบ <Source> ได้รับการตั้งค่าเป็นตัวแปรที่
ไม่ใช่ประเภท
message
|
build |
ข้อผิดพลาดในการทำให้ใช้งานได้
ไม่มี
ตัวแปรความผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทำให้เกิดข้อผิดพลาด โปรดดูข้อมูลเพิ่มเติมที่หัวข้อสิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบาย
| ตัวแปร | สถานที่ | ตัวอย่าง |
|---|---|---|
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 Object Notation (JSON) จะเสี่ยงต่อการโจมตีระดับเนื้อหา การโจมตี JSON แบบง่ายจะพยายามใช้โครงสร้างที่ทำให้ตัวแยกวิเคราะห์ JSON ทำงานหนักเกินไป จนทำให้บริการล่มและทำให้เกิดการโจมตีแบบปฏิเสธการให้บริการระดับแอปพลิเคชัน การตั้งค่าทั้งหมดเป็น แบบไม่บังคับและควรปรับแต่งให้เหมาะสมกับข้อกำหนดของบริการเพื่อป้องกันช่องโหว่ที่อาจเกิดขึ้น