การแก้ปัญหาเกี่ยวกับรันไทม์ของการป้องกันภัยคุกคามของ 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 เนื่องจาก depth มากกว่า 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>