การแก้ปัญหาเกี่ยวกับรันไทม์ของการป้องกันภัยคุกคามของ 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 (บริษัท) เนื่องจากจำนวนรายการออบเจ็กต์ในเพย์โหลด 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 and บรรทัดในเพย์โหลด 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 คุณจะได้รับข้อผิดพลาดต่อไปนี้เนื่องจากคำขอไม่ใช่ค่าที่ถูกต้องและไม่ได้อยู่ในกระบวนการที่มีการเรียกใช้นโยบาย

    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 และชื่อตัวแปรแหล่งที่มาจากข้อความแสดงข้อผิดพลาด เช่น ในข้อความแสดงข้อผิดพลาดต่อไปนี้ ชื่อนโยบายคือ 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>