การแก้ปัญหาเกี่ยวกับรันไทม์ของการป้องกันภัยคุกคามของ JSON

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

ExecutionFailed

รหัสข้อผิดพลาด

steps.jsonthreatprotection.ExecutionFailed

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]: error_description
          at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

ประเภทของข้อผิดพลาดและสาเหตุที่เป็นไปได้

นโยบาย JSONThreatProtection อาจแสดงข้อผิดพลาด ExecutionFailed หลายประเภท ตารางด้านล่างแสดงข้อผิดพลาดประเภทต่างๆ และสาเหตุที่เป็นไปได้

ประเภทข้อผิดพลาด สาเหตุ
ชื่อรายการออบเจ็กต์มีความยาวเกินขีดจำกัด สตริงมีความยาวเกินความยาวสูงสุดที่อนุญาตในชื่อรายการของออบเจ็กต์
จำนวนรายการออบเจ็กต์เกินขีดจำกัด จำนวนรายการสูงสุดที่อนุญาตในออบเจ็กต์เกิน
จำนวนองค์ประกอบอาร์เรย์เกิน จำนวนองค์ประกอบสูงสุดที่อนุญาตในอาร์เรย์มีจำนวนเกิน
ความลึกของคอนเทนเนอร์เกินขีดจำกัด ความลึกในการฝังเกินค่าสูงสุดที่อนุญาตแล้ว
ค่าสตริงมีความยาวเกิน ค่าสตริงมีความยาวเกินความยาวสูงสุดที่อนุญาต
ออบเจ็กต์ JSON ไม่ถูกต้อง เพย์โหลด JSON ที่ป้อนไม่ถูกต้อง

ชื่อรายการออบเจ็กต์มีความยาวเกิน

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded object entry name length at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

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

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากเพย์โหลดข้อความอินพุตที่ระบุโดยองค์ประกอบ <Source> ประกอบด้วยออบเจ็กต์ JSON ที่มีชื่อพร็อพเพอร์ตี้เกินความยาวสูงสุดที่ระบุไว้ในองค์ประกอบ <ObjectEntryNameLength>

เช่น หากระบุองค์ประกอบ <ObjectEntryNameLength> เป็น 5 ในนโยบาย แต่เพย์โหลดข้อความอินพุตมีพร็อพเพอร์ตี้ JSON ที่มีชื่อเกิน 5 อักขระ ระบบจะแสดงข้อผิดพลาดนี้

การวินิจฉัย

  1. ตรวจสอบข้อความแสดงข้อผิดพลาดเพื่อระบุชื่อนโยบาย JSONThreatProtection และหมายเลขบรรทัดที่ชื่อรายการยาวปรากฏขึ้น เช่น ในข้อความแสดงข้อผิดพลาดต่อไปนี้ ชื่อนโยบาย JSONThreatProtection คือ JSON-Threat-Protection-1 และหมายเลขบรรทัดในเพย์โหลดคือ 2

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. ตรวจสอบนโยบายที่คุณระบุไว้ในขั้นตอนที่ 1 และจดค่าที่ระบุไว้ในองค์ประกอบ <ObjectEntryNameLength>

    ตัวอย่างเช่น ในนโยบาย JSONThreatProtection ต่อไปนี้ <ObjectEntryNameLength> มีการตั้งค่าเป็น 5

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>5</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. ตรวจสอบหมายเลขบรรทัดเฉพาะ (ระบุไว้ในขั้นตอนที่ 1) ของเพย์โหลดอินพุต และตรวจสอบว่าความยาวของชื่อออบเจ็กต์มากกว่าค่าที่ระบุไว้ในองค์ประกอบ <ObjectEntryNameLength> หรือไม่ (ระบุไว้ในขั้นตอนที่ 2) หากชื่อออบเจ็กต์มีความยาวมากกว่าตัวเลขนั้น ข้อผิดพลาดดังกล่าวก็จะเป็นสาเหตุของข้อผิดพลาด

    ตัวอย่างเพย์โหลดอินพุตมีดังนี้

    {
       "number" : 500,
       "string" : "text"
    }
    

    เพย์โหลด JSON ที่แสดงด้านบนมีพร็อพเพอร์ตี้ชื่อ number ที่บรรทัด 2 ซึ่งมี 6 อักขระ (ชื่อมีความยาว 6 อักขระ) เนื่องจากชื่อออบเจ็กต์มีความยาวมากกว่า 5 (ค่าที่ระบุสำหรับองค์ประกอบ <ObjectEntryNameLength>) คุณจึงได้รับข้อผิดพลาดต่อไปนี้

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    

ความละเอียด

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

อย่างไรก็ตาม หากคุณพิจารณาว่าสามารถระบุชื่อรายการออบเจ็กต์ที่ยาวขึ้นในเพย์โหลดได้โดยไม่มีผลกระทบใดๆ ให้แก้ไข <ObjectEntryNameLength> เป็นค่าที่เหมาะสมตามข้อกำหนดของคุณ

ตัวอย่างเช่น หากคุณคิดว่าสามารถอนุญาตให้ชื่อออบเจ็กต์มีความยาวได้สูงสุด 10 อักขระ ให้แก้ไขนโยบาย JSONThreatProtection ดังนี้

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>10</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

จำนวนรายการออบเจ็กต์เกินขีดจำกัด

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded object entry count at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded object entry count at line 7",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากเพย์โหลดข้อความอินพุตที่ระบุโดยองค์ประกอบ <Source> ประกอบด้วยออบเจ็กต์ JSON ที่มีรายการ (พร็อพเพอร์ตี้) มากกว่าค่าที่ระบุไว้ในองค์ประกอบ <ObjectEntryCount> ของนโยบาย

ตัวอย่างเช่น หากองค์ประกอบ <ObjectEntryCount> มี 5 แต่เพย์โหลด JSON อินพุตมีรายการมากกว่า 5 รายการ ระบบจะแสดงข้อผิดพลาดนี้

การวินิจฉัย

  1. ตรวจสอบข้อความแสดงข้อผิดพลาดเพื่อระบุชื่อนโยบาย JSONThreatProtection และหมายเลขบรรทัดที่มีจำนวนรายการเกิน ตัวอย่างเช่น ในข้อความแสดงข้อผิดพลาดต่อไปนี้ ชื่อนโยบายคือ JSON-Threat-Protection-1 และหมายเลขบรรทัดในเพย์โหลดคือ 7

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. จดบันทึกค่าที่ระบุในองค์ประกอบ <ObjectEntryCount> ของนโยบาย (ระบุในขั้นตอนที่ 1)

    ในตัวอย่างนโยบายต่อไปนี้ <ObjectEntryCount> มีการตั้งค่าเป็น 5

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>6</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. ตรวจสอบหมายเลขบรรทัดเฉพาะ (ระบุไว้ในขั้นตอนที่ 1) ของเพย์โหลดอินพุต และตรวจสอบว่าจํานวนเอนทิตีในเพย์โหลดมากกว่าค่าที่ระบุสําหรับองค์ประกอบ <ObjectEntryCount> หรือไม่ (ระบุไว้ในขั้นตอนที่ 2) หากจำนวนออบเจ็กต์เกินจำนวนรายการออบเจ็กต์ แสดงว่านี่อาจเป็นสาเหตุของข้อผิดพลาด

    ตัวอย่างเพย์โหลดอินพุตมีดังนี้

    {
    "name" : "John",
    "id" : 234687,
    "age" : 31,
    "city" : "New York",
    "country" : "USA",
    "company" : "Google"
    }
    

    ในเพย์โหลด JSON ที่แสดงด้านบน รายการที่ 6 อยู่บรรทัด #7 (company) เนื่องจากจํานวนรายการออบเจ็กต์ในเพย์โหลด JSON อินพุตมากกว่า 5 (ค่าที่ระบุสำหรับองค์ประกอบ <ObjectEntryCount>) คุณจึงได้รับข้อผิดพลาดต่อไปนี้

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count at
    line 7
    

ความละเอียด

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

อย่างไรก็ตาม หากคุณพิจารณาว่าสามารถรวมรายการออบเจ็กต์ได้มากขึ้นในเพย์โหลดโดยไม่มีผลกระทบใดๆ ให้แก้ไข <ObjectEntryCount> เป็นค่าที่เหมาะสมตามความต้องการของคุณ

ตัวอย่างเช่น หากคุณคิดว่าอนุญาตรายการออบเจ็กต์ได้สูงสุด 10 รายการ ให้แก้ไขนโยบาย JSONThreatProtection ดังนี้

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>10</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

จำนวนองค์ประกอบอาร์เรย์เกินขีดจํากัด

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded array element count at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded array element count at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากเพย์โหลดข้อความอินพุตที่ระบุโดยองค์ประกอบ <Source> มีอาร์เรย์ JSON ที่มีจำนวนองค์ประกอบมากกว่าจำนวนที่ระบุไว้ในองค์ประกอบ <ArrayElementCount> ของนโยบาย

เช่น หากระบุองค์ประกอบ <ArrayElementCount> เป็น 3 แต่เพย์โหลดอินพุตมีอาร์เรย์ JSON ที่มีองค์ประกอบมากกว่า 3 รายการ ระบบจะแสดงข้อผิดพลาดนี้

การวินิจฉัย

  1. ตรวจสอบข้อความแสดงข้อผิดพลาดเพื่อระบุชื่อนโยบายและหมายเลขบรรทัดที่เกินความยาวของอาร์เรย์ ตัวอย่างเช่น ในข้อความแสดงข้อผิดพลาดต่อไปนี้ ชื่อนโยบายคือ JSON-Threat-Protection-1 และหมายเลขบรรทัดในเพย์โหลดคือ 3

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. จดบันทึกค่าที่ระบุสำหรับองค์ประกอบ <ArrayElementCount> ของนโยบาย (ระบุในขั้นตอนที่ 1)

    ในตัวอย่างนโยบาย JSONThreatProtection ต่อไปนี้ <ArrayElementCount> ได้รับการตั้งค่าเป็น 3

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>6</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. ตรวจสอบหมายเลขบรรทัดเฉพาะ (ระบุไว้ในขั้นตอนที่ 1) ของเพย์โหลดอินพุต และตรวจสอบว่าอาร์เรย์ที่ระบุมีจํานวนมากกว่าตัวเลขที่ระบุไว้ในองค์ประกอบ <ArrayElementCount> หรือไม่ (ระบุไว้ในขั้นตอนที่ 2) หากจำนวนองค์ประกอบอาร์เรย์เกินจํานวนดังกล่าว แสดงว่านั่นคือสาเหตุของข้อผิดพลาด

    ตัวอย่างเพย์โหลดอินพุตมีดังนี้

    {
     "name":"Ford",
     "models":[
        "Mustang",
        "Endeavour",
        "Fiesta",
        "EcoSport",
        "Focus"
     ]
    }
    

    เพย์โหลด JSON ที่แสดงด้านบนมีองค์ประกอบ 5 รายการในอาร์เรย์ชื่อ models ในบรรทัดที่ 3 เนื่องจากจํานวนองค์ประกอบอาร์เรย์มากกว่า 3 (ค่าที่ระบุสำหรับองค์ประกอบ <ArrayElementCount>) คุณจึงได้รับข้อผิดพลาดต่อไปนี้

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count
    at line 3
    

ความละเอียด

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

อย่างไรก็ตาม หากคุณพิจารณาว่าอนุญาตให้มีองค์ประกอบในอาร์เรย์ได้มากกว่านี้ ให้แก้ไข <ArrayElementCount> เป็นค่าที่เหมาะสมตามข้อกำหนดของคุณ

ตัวอย่างเช่น หากคุณคิดว่าอนุญาตองค์ประกอบอาร์เรย์ได้สูงสุด 5 รายการ ให้แก้ไขนโยบายดังนี้

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>5</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

คอนเทนเนอร์มีความลึกเกิน

เนื้อหาการตอบกลับข้อผิดพลาด

การรับส่งข้อมูลรันไทม์แสดงผลโค้ดตอบกลับ 500 พร้อมข้อผิดพลาดต่อไปนี้

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded container depth at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded container depth at line 5",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

สาเหตุ

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

เช่น หากองค์ประกอบ <ContainerDepth> คือ 3 แต่เพย์โหลดอินพุตมีความลึกของคอนเทนเนอร์เกินขีดจํากัดนี้ ระบบจะแสดงข้อผิดพลาดนี้

การวินิจฉัย

  1. ตรวจสอบข้อความแสดงข้อผิดพลาดเพื่อระบุชื่อนโยบาย JSONThreatProtection และหมายเลขบรรทัดที่ความลึกของคอนเทนเนอร์เกินขีดจำกัด ตัวอย่างเช่น ในข้อความแสดงข้อผิดพลาดต่อไปนี้ ชื่อนโยบายคือ JSON-Threat-Protection-1 และหมายเลขบรรทัดในเพย์โหลดคือ 5

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. จดค่าที่ระบุสำหรับองค์ประกอบ <ContainerDepth> (ระบุไว้ในขั้นตอนที่ 1)

    ในตัวอย่างนโยบาย JSONThreatProtection ต่อไปนี้ <ContainerDepth> มีการตั้งค่าเป็น 5

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. ตรวจสอบหมายเลขบรรทัดเฉพาะ (ระบุไว้ในขั้นตอนที่ 1) ของเพย์โหลดอินพุต และตรวจสอบว่าความลึกของคอนเทนเนอร์ในเพย์โหลดสูงกว่าค่าที่ระบุไว้ในองค์ประกอบ <ContainerDepth> หรือไม่ (ระบุไว้ในขั้นตอนที่ 2) หากความลึกของคอนเทนเนอร์เกินจํานวนดังกล่าว แสดงว่านี่อาจเป็นสาเหตุของข้อผิดพลาด

    ตัวอย่างเพย์โหลดอินพุตมีดังนี้

    {
     "ContainerDepth2":[ {
           "ContainerDepth4":[
              {
                 "ContainerDepth6":[
                    "1",
                    "2"
                 ]
              }
           ]
        }
     ]
    }
    

    เพย์โหลด JSON ที่แสดงด้านบนมีความลึกของคอนเทนเนอร์ 6 ที่บรรทัด 5 เนื่องจากความลึกมากกว่า 5 ค่าที่ระบุสำหรับองค์ประกอบ <ContainerDepth> ของนโยบาย JSONThreatProtection ที่คุณได้รับข้อผิดพลาดต่อไปนี้

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    

ความละเอียด

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

อย่างไรก็ตาม หากคุณพิจารณาว่าความลึกของคอนเทนเนอร์ที่มากกว่านั้นยอมรับได้ ให้แก้ไข <ContainerDepth> เป็นค่าที่เหมาะสมตามข้อกำหนดของคุณ

ตัวอย่างเช่น หากคุณคิดว่าสามารถอนุญาตให้ใช้คอนเทนเนอร์ที่มีความลึกสูงสุด 10 ชั้น ให้แก้ไขนโยบายดังนี้

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>10</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

เกินความยาวค่าสตริง

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded string value length at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded string value length at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากเพย์โหลดข้อความอินพุตที่ระบุโดยองค์ประกอบ <Source> มีองค์ประกอบ JSON ที่มีค่าซึ่งมีอักขระมากกว่าที่องค์ประกอบ <StringValueLength> อนุญาต

ตัวอย่างเช่น หากตั้งค่าองค์ประกอบ <StringValueLength> เป็น 50 ในนโยบาย แต่เพย์โหลดอินพุตมีองค์ประกอบอย่างน้อย 1 รายการที่มีค่ามากกว่า 50 อักขระ ระบบจะแสดงข้อผิดพลาดนี้

การวินิจฉัย

  1. ตรวจสอบข้อความแสดงข้อผิดพลาดเพื่อระบุชื่อนโยบายและหมายเลขบรรทัดที่เกินความยาวสตริง ในตัวอย่างต่อไปนี้ ชื่อนโยบายคือบรรทัดJSON-Threat-Protection-1 andในเพย์โหลด 3

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length at line 3
    
  2. จดค่าที่ระบุสำหรับองค์ประกอบ <StringValueLength> ใน (ที่ระบุไว้ในขั้นตอนที่ 1)

    ในตัวอย่างนโยบาย JSONThreatProtection ต่อไปนี้ <StringValueLength> ได้รับการตั้งค่าเป็น 50

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. ตรวจสอบหมายเลขบรรทัดเฉพาะ (ระบุไว้ในขั้นตอนที่ 1) ของเพย์โหลดอินพุต และตรวจสอบว่าความยาวของค่ามากกว่าจํานวนของอักขระที่ระบุสําหรับองค์ประกอบ <StringValueLength> หรือไม่ (ระบุไว้ในขั้นตอนที่ 2) หากความยาวของค่าเกินขีดจํากัด แสดงว่านี่อาจเป็นสาเหตุของข้อผิดพลาด

    ตัวอย่างเพย์โหลดอินพุตมีดังนี้

    {
      "Country": "New Zealand",
      "Place Name": "Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu"
    }
    

    เพย์โหลด JSON ที่แสดงด้านบนมีออบเจ็กต์ชื่อ Place Name ที่มีค่า Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu ซึ่งมีความยาว 85 อักขระในบรรทัดที่ 3 เนื่องจากค่ามีความยาวมากกว่า 50 ซึ่งเป็นค่าที่ระบุไว้ในองค์ประกอบ <StringValueLength> คุณจึงได้รับข้อผิดพลาดต่อไปนี้

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length
    at line 3
    

ความละเอียด

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

อย่างไรก็ตาม หากคุณระบุว่าระบุความยาวค่าที่ยาวกว่าในเพย์โหลดได้ ให้แก้ไข <StringValueLength> เป็นค่าที่เหมาะสมตามความต้องการของคุณ

เช่น หากคุณคิดว่าอนุญาตให้ค่ามีความยาวได้สูงสุด 90 ให้แก้ไขนโยบายดังนี้

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>90</StringValueLength>
</JSONThreatProtection>

ออบเจ็กต์ JSON ไม่ถูกต้อง

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: string: at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: Expecting : at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากเพย์โหลดข้อความอินพุตที่ระบุโดยองค์ประกอบ <Source> ในนโยบาย JSONThreatProtection ไม่ใช่ออบเจ็กต์ JSON ที่ถูกต้อง

การวินิจฉัย

  1. ตรวจสอบข้อความแสดงข้อผิดพลาดเพื่อระบุชื่อนโยบายและหมายเลขบรรทัดที่เกิดข้อผิดพลาด ในตัวอย่างนี้ ชื่อนโยบายคือ JSON-Threat-Protection-1 andline in the payload 2

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. ตรวจสอบหมายเลขบรรทัดเฉพาะ (ระบุไว้ในขั้นตอนที่ 1) ของเพย์โหลดอินพุต และตรวจสอบว่าออบเจ็กต์ JSON ที่ส่งในเพย์โหลดเป็นออบเจ็กต์ JSON ที่ถูกต้องหรือไม่

    ตัวอย่างเพย์โหลดอินพุตมีดังนี้

    {
      "Longitude": 6.11499,
      "Latitude"  50.76891
    }
    

    ในเพย์โหลด JSON ที่แสดงด้านบน บรรทัดที่ 3 ไม่มี ":" (โคลอน) เนื่องจากไม่ใช่ออบเจ็กต์ JSON ที่ถูกต้อง คุณจึงได้รับข้อผิดพลาดต่อไปนี้

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    Expecting : at line 3
    

ความละเอียด

ตรวจสอบว่าส่งเพย์โหลด JSON อินพุตที่ถูกต้องไปยังพร็อกซี API ที่มีนโยบาย JSONThreatProtection

จากตัวอย่างที่อธิบายข้างต้น ให้แก้ไขเพย์โหลด JSON ดังนี้

{
    "Longitude": 6.11499,
  "Latitude" : 50.76891
}

SourceUnavailable

รหัสข้อผิดพลาด

steps.jsonthreatprotection.SourceUnavailable

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]::
          Source[var_name] is not available"
        "detail": {
            "errorcode": "steps.jsonthreatprotection.SourceUnavailable"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]::
          Source requests is not available",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.SourceUnavailable"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปร message ที่ระบุไว้ในองค์ประกอบ <Source> ของนโยบาย JSONThreatProtection เป็นค่าใดค่าหนึ่งต่อไปนี้

  • อยู่นอกขอบเขต (ไม่พร้อมใช้งานในขั้นตอนที่นโยบายกำลังทำงาน)
  • ไม่ใช่ค่า request, response หรือ message ที่ถูกต้อง

ตัวอย่างเช่น ข้อผิดพลาดนี้จะเกิดขึ้นหากตั้งค่าองค์ประกอบ <Source> ในนโยบายเป็นตัวแปรที่ไม่มีอยู่ในขั้นตอนที่เรียกใช้นโยบาย

การวินิจฉัย

  1. ระบุชื่อนโยบายและชื่อตัวแปรแหล่งที่มาจากข้อความแสดงข้อผิดพลาด ตัวอย่างเช่น ในข้อความแสดงข้อผิดพลาดต่อไปนี้ ชื่อนโยบายคือ JSON-Threat-Protection-1 และตัวแปรแหล่งที่มาคือ requests

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. ตรวจสอบค่าที่ระบุสำหรับองค์ประกอบ <Source> ที่ระบุไว้ในขั้นตอนที่ 1

    ในตัวอย่างนโยบาย JSONThreatProtection ต่อไปนี้ องค์ประกอบ <Source> มีการตั้งค่าเป็น requests

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>requests</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    

    ค่าที่ใช้ได้สำหรับองค์ประกอบ <Source> คือ request, response หรือ message เนื่องจาก requests ไม่ใช่ค่าที่ถูกต้องและไม่อยู่ในขั้นตอนที่ระบบกำลังเรียกใช้นโยบาย คุณจึงได้รับข้อผิดพลาดต่อไปนี้

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    

ความละเอียด

ตรวจสอบว่าตัวแปรที่ตั้งค่าไว้ในองค์ประกอบ <Source> ของนโยบาย JSONThreatProtection ที่ดำเนินการไม่สำเร็จได้รับการตั้งค่าเป็น request, response หรือ message และอยู่ในโฟลว์ที่นโยบายทำงาน

หากต้องการแก้ไขตัวอย่างนโยบาย JSONThreatProtection ที่แสดงด้านบน ให้แก้ไของค์ประกอบ <Source> ให้ใช้ตัวแปร request เพราะมีอยู่ในขั้นตอนคําขอ

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

NonMessageVariable

รหัสข้อผิดพลาด

steps.jsonthreatprotection.NonMessageVariable

เนื้อหาการตอบกลับข้อผิดพลาด

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Variable var_name does not resolve to a Message"
        "detail": {
            "errorcode": "steps.jsonthreatprotection.NonMessageVariable"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Variable message.content does not resolve to a Message",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.NonMessageVariable"
        }
    }
}

สาเหตุ

ข้อผิดพลาดนี้เกิดขึ้นหากมีการตั้งองค์ประกอบ <Source> ในนโยบาย JSONThreatProtection เป็นตัวแปรที่ไม่ใช่ประเภท message

ตัวแปรประเภทข้อความแสดงคําขอและคําตอบ HTTP ทั้งหมด คําขอ การตอบกลับ และข้อความตัวแปรของโฟลว์ Apigee Edge ในตัวจะเป็นประเภทข้อความ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรข้อความได้ที่ข้อมูลอ้างอิงตัวแปร

การวินิจฉัย

  1. ระบุชื่อนโยบาย JSONThreatProtection และชื่อตัวแปร Source จากข้อความแสดงข้อผิดพลาด ตัวอย่างเช่น ในข้อความแสดงข้อผิดพลาดต่อไปนี้ ชื่อนโยบายคือ JSON-Threat-Protection-1 และตัวแปรแหล่งที่มาคือ message.content

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. ตรวจสอบองค์ประกอบ <Source> ของนโยบาย JSONThreatProtection (ระบุในขั้นตอนที่ 1)

    ในตัวอย่างนโยบาย JSONThreatProtection ต่อไปนี้ <Source> ได้รับการตั้งค่าเป็น message.content แทน message

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>message.content</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    

    เนื่องจาก message.content ไม่ใช่ข้อความ คุณจึงได้รับข้อผิดพลาดดังต่อไปนี้

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does
    not resolve to a Message
    

ความละเอียด

ตรวจสอบว่าองค์ประกอบ <Source> ในนโยบาย JSONThreatProtection ที่ดำเนินการไม่สำเร็จได้รับการตั้งค่าเป็นตัวแปรโฟลว์ประเภท message ที่มีอยู่ในโฟลว์ที่นโยบายทำงาน

หากต้องการแก้ไขนโยบาย คุณสามารถแก้ไของค์ประกอบ <Source> เพื่อระบุตัวแปรที่เป็นประเภทข้อความ ตัวอย่างเช่น ใน JSONThreatProtection ที่ดำเนินการไม่สำเร็จ คุณสามารถระบุองค์ประกอบ <Source> เป็น message ดังนี้

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>message</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>