Khắc phục lỗi khi bắt đầu chạy tính năng Bảo vệ khỏi mối đe doạ JSON

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu về Apigee X.
thông tin

ExecutionFailed

Mã lỗi

steps.jsonthreatprotection.ExecutionFailed

Nội dung phản hồi về lỗi

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

Các loại lỗi và nguyên nhân có thể xảy ra

Chính sách JSONThreatProtection có thể gửi nhiều loại lỗi ExecutionFailed. Bảng dưới đây liệt kê các loại lỗi khác nhau và nguyên nhân có thể gây ra các lỗi đó:

Loại lỗi Nguyên nhân
Đã vượt quá độ dài tên mục nhập đối tượng Độ dài chuỗi tối đa được phép trong tên mục của đối tượng đã vượt quá.
Đã vượt quá số mục nhập đối tượng Vượt quá số mục nhập tối đa được phép trong một đối tượng.
Vượt quá số lượng phần tử mảng Vượt quá số lượng phần tử tối đa được phép trong một mảng.
Vượt quá chiều sâu vùng chứa Đã vượt quá độ sâu lồng ghép tối đa được phép.
Vượt quá độ dài giá trị chuỗi Độ dài tối đa được phép cho một giá trị chuỗi đã bị vượt quá.
Đối tượng JSON không hợp lệ Tải trọng JSON đầu vào là không hợp lệ.

Đã vượt quá độ dài tên mục nhập đối tượng

Nội dung phản hồi lỗi

{
    "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"
        }
    }
}

Ví dụ về nội dung phản hồi lỗi

{
    "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"
        }
    }
}

Nguyên nhân

Lỗi này xảy ra nếu tải trọng thông báo đầu vào do phần tử <Source> chỉ định chứa một đối tượng JSON có tên thuộc tính vượt quá độ dài tối đa được chỉ định trong phần tử <ObjectEntryNameLength>.

Ví dụ: nếu phần tử <ObjectEntryNameLength> được chỉ định là 5 trong chính sách, nhưng tải trọng thông báo đầu vào có thuộc tính JSON có tên vượt quá 5 ký tự, thì lỗi này sẽ xảy ra.

Chẩn đoán

  1. Kiểm tra thông báo lỗi để xác định tên chính sách JSONThreatProtection và số dòng chứa tên mục nhập dài. Ví dụ: trong thông báo lỗi sau đây, tên chính sách JSONThreatProtection là JSON-Threat-Protection-1 và số dòng trong tải trọng là 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. Kiểm tra chính sách mà bạn đã xác định ở Bước 1 và ghi lại giá trị được chỉ định trong phần tử <ObjectEntryNameLength>.

    Ví dụ: trong chính sách JSONThreatProtection sau đây, <ObjectEntryNameLength> được đặt thành 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. Kiểm tra số dòng cụ thể (được xác định ở Bước 1) của tải trọng đầu vào và kiểm tra xem độ dài của tên đối tượng có lớn hơn giá trị được chỉ định trong phần tử <ObjectEntryNameLength> (được xác định ở Bước 2) hay không. Nếu độ dài của tên đối tượng vượt quá con số đó, thì đó là nguyên nhân gây ra lỗi.

    Dưới đây là ví dụ về tải trọng đầu vào:

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

    Gói dữ liệu JSON hiển thị ở trên có một thuộc tính tên là number ở dòng 2, có 6 ký tự (độ dài tên là 6). Vì độ dài của tên đối tượng lớn hơn 5 (giá trị được chỉ định cho phần tử <ObjectEntryNameLength>), nên bạn sẽ gặp lỗi sau:

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

Độ phân giải

Nếu chính sách JSONThreatProtection dùng để bảo vệ khỏi các tải trọng có tên mục nhập đối tượng vượt quá giá trị đã xác định, thì thông báo lỗi sẽ xuất hiện. Trong trường hợp này, bạn không cần làm gì thêm.

Tuy nhiên, nếu bạn xác định rằng có thể chỉ định tên mục nhập đối tượng dài hơn trong tải trọng mà không có bất kỳ hậu quả nào, hãy sửa đổi <ObjectEntryNameLength> thành một giá trị phù hợp dựa trên yêu cầu của bạn.

Ví dụ: nếu bạn cho phép tên đối tượng có độ dài tối đa là 10 ký tự, hãy sửa đổi chính sách JSONThreatProtection như sau:

<?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>

Đã vượt quá số mục nhập đối tượng

Nội dung phản hồi về lỗi

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

Ví dụ về nội dung phản hồi lỗi

{
    "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"
        }
    }
}

Nguyên nhân

Lỗi này xảy ra nếu tải trọng thông báo đầu vào do phần tử <Source> chỉ định chứa một đối tượng JSON có nhiều mục nhập (thuộc tính) hơn giá trị được chỉ định trong phần tử <ObjectEntryCount> của chính sách.

Ví dụ: nếu phần tử <ObjectEntryCount> là 5, nhưng tải trọng JSON đầu vào có nhiều hơn 5 mục nhập, thì lỗi này sẽ được gửi.

Chẩn đoán

  1. Kiểm tra thông báo lỗi để xác định tên chính sách JSONThreatProtection và số dòng vượt quá số mục nhập. Ví dụ: trong thông báo lỗi sau, tên chính sách là JSON-Threat-Protection-1 và số dòng trong tải trọng là 7:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. Ghi lại giá trị được chỉ định trong phần tử <ObjectEntryCount> của chính sách (được xác định trong Bước 1).

    Trong ví dụ sau về chính sách, <ObjectEntryCount> được đặt thành 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. Kiểm tra số dòng cụ thể (được xác định ở Bước 1) của tải trọng đầu vào và kiểm tra xem số lượng thực thể trong tải trọng có lớn hơn giá trị được chỉ định cho phần tử <ObjectEntryCount> (được xác định ở Bước 2) hay không. Nếu số lượng đối tượng vượt quá số mục nhập đối tượng, thì đó là nguyên nhân gây ra lỗi.

    Dưới đây là ví dụ về tải trọng đầu vào:

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

    Trong tải trọng JSON hiển thị ở trên, mục thứ 6 xảy ra ở dòng #7 (công ty). Vì số lượng mục nhập đối tượng trong tải trọng JSON đầu vào lớn hơn 5 (giá trị được chỉ định cho phần tử <ObjectEntryCount>), nên bạn sẽ gặp lỗi sau:

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

Độ phân giải

Nếu mục đích của chính sách JSONThreatProtection là bảo vệ khỏi các tải trọng có số lượng mục nhập đối tượng vượt quá một ngưỡng cụ thể, thì thông báo lỗi sẽ không xuất hiện. Trong trường hợp này, bạn không cần phải làm gì thêm.

Tuy nhiên, nếu bạn xác định rằng có thể thêm nhiều mục nhập đối tượng vào tải trọng mà không có bất kỳ hậu quả nào, hãy sửa đổi <ObjectEntryCount> thành một giá trị phù hợp dựa trên yêu cầu của bạn.

Ví dụ: Nếu bạn cho rằng có thể cho phép tối đa 10 mục nhập đối tượng, hãy sửa đổi chính sách JSONThreatProtection như sau:

<?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>

Vượt quá số lượng phần tử mảng

Nội dung phản hồi về lỗi

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

Ví dụ về nội dung phản hồi lỗi

{
    "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"
        }
    }
}

Nguyên nhân

Lỗi này xảy ra nếu tải trọng thông báo đầu vào do phần tử <Source> chỉ định chứa một mảng JSON có số lượng phần tử nhiều hơn số lượng được chỉ định trong phần tử <ArrayElementCount> của chính sách.

Ví dụ: nếu phần tử <ArrayElementCount> được chỉ định là 3, nhưng tải trọng đầu vào có một mảng JSON có nhiều hơn 3 phần tử, thì lỗi này sẽ xảy ra.

Chẩn đoán

  1. Kiểm tra thông báo lỗi để xác định tên chính sách và số dòng bị vượt quá độ dài mảng. Ví dụ: trong thông báo lỗi sau, tên chính sách là JSON-Threat-Protection-1 và số dòng trong tải trọng là 3:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. Ghi lại giá trị được chỉ định cho phần tử <ArrayElementCount> của chính sách (được xác định ở Bước 1).

    Trong ví dụ sau đây về chính sách JSONThreatProtection, <ArrayElementCount> được đặt thành 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. Kiểm tra số dòng cụ thể (được xác định ở Bước 1) của tải trọng đầu vào và kiểm tra xem mảng được chỉ định ở đó có số lượng cao hơn số lượng được chỉ định trong phần tử <ArrayElementCount> (được xác định ở Bước 2) hay không. Nếu số lượng phần tử mảng vượt quá số lượng, thì đó là nguyên nhân gây ra lỗi.

    Dưới đây là ví dụ về tải trọng đầu vào:

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

    Tải trọng JSON hiển thị ở trên có 5 phần tử trong mảng có tên là models ở dòng 3. Vì số phần tử mảng lớn hơn 3 (giá trị được chỉ định cho phần tử <ArrayElementCount>), nên bạn sẽ gặp lỗi sau:

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

Độ phân giải

Nếu chính sách JSONThreatProtection dùng để bảo vệ khỏi các tải trọng có ngưỡng số lượng mảng cụ thể, thì thông báo lỗi sẽ xuất hiện. Trong trường hợp này, bạn không cần làm gì thêm.

Tuy nhiên, nếu bạn xác định rằng có thể cho phép số lượng phần tử cao hơn trong một mảng, hãy sửa đổi <ArrayElementCount> thành một giá trị phù hợp dựa trên yêu cầu của bạn.

Ví dụ: Nếu bạn cho rằng mình có thể cho phép tối đa 5 phần tử mảng, hãy sửa đổi chính sách như sau:

<?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>

Đã vượt quá độ sâu vùng chứa

Nội dung phản hồi về lỗi

Lưu lượng truy cập trong thời gian chạy trả về mã phản hồi 500 với lỗi sau:

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

Ví dụ về nội dung phản hồi lỗi

{
    "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"
        }
    }
}

Nguyên nhân

Lỗi này xảy ra nếu tải trọng thông báo đầu vào do phần tử <Source> chỉ định chứa một đối tượng JSON chứa các phần tử JSON có chiều sâu vùng chứa vượt quá chiều sâu vùng chứa tối đa được chỉ định trong phần tử <ContainerDepth> của chính sách. Độ sâu vùng chứa là độ sâu lồng tối đa được phép cho các phần tử JSON. Ví dụ: một mảng chứa một đối tượng chứa một đối tượng sẽ dẫn đến độ sâu chứa là 3.

Ví dụ: nếu phần tử <ContainerDepth>3, nhưng tải trọng đầu vào có chiều sâu vùng chứa vượt quá giới hạn này, thì lỗi này sẽ được gửi.

Chẩn đoán

  1. Kiểm tra thông báo lỗi để xác định tên chính sách JSONThreatProtection và số dòng vượt quá chiều sâu vùng chứa. Ví dụ: trong thông báo lỗi sau, tên chính sách là JSON-Threat-Protection-1 và số dòng trong tải trọng là 5.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. Ghi lại giá trị được chỉ định cho phần tử <ContainerDepth> (được xác định trong Bước 1).

    Trong ví dụ sau về chính sách JSONThreatProtection, <ContainerDepth> được đặt thành 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. Kiểm tra số dòng cụ thể (được xác định ở Bước 1) của tải trọng đầu vào và kiểm tra xem chiều sâu vùng chứa trong tải trọng có cao hơn giá trị được chỉ định trong phần tử <ContainerDepth> (được xác định ở Bước 2) hay không. Nếu chiều sâu vùng chứa vượt quá số lượng, thì đó là nguyên nhân gây ra lỗi.

    Dưới đây là ví dụ về tải trọng đầu vào:

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

    Tải trọng JSON hiển thị ở trên có chiều sâu vùng chứa là 6 ở dòng 5. Vì chiều sâu lớn hơn 5, giá trị được chỉ định cho phần tử <ContainerDepth> của chính sách JSONThreatProtection, bạn sẽ gặp lỗi sau:

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

Độ phân giải

Nếu chính sách JSONThreatProtection dùng để bảo vệ khỏi các tải trọng có chiều sâu vùng chứa vượt quá giá trị đã chỉ định, thì thông báo lỗi sẽ xuất hiện. Trong trường hợp này, bạn không cần làm gì thêm.

Tuy nhiên, nếu bạn xác định rằng độ sâu vùng chứa cao hơn là chấp nhận được, hãy sửa đổi <ContainerDepth> thành một giá trị phù hợp dựa trên yêu cầu của bạn.

Ví dụ: Nếu bạn cho rằng mình có thể cho phép độ sâu vùng chứa tối đa là 10, thì hãy sửa đổi chính sách như sau:

<?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>

Đã vượt quá độ dài giá trị chuỗi

Nội dung phản hồi về lỗi

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

Ví dụ về nội dung phản hồi lỗi

{
    "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"
        }
    }
}

Nguyên nhân

Lỗi này xảy ra nếu tải trọng thông báo đầu vào do phần tử <Source> chỉ định chứa các phần tử JSON có giá trị chứa nhiều ký tự hơn mức phần tử <StringValueLength> cho phép.

Ví dụ: nếu phần tử <StringValueLength> được đặt thành 50 trong chính sách, nhưng tải trọng đầu vào có một hoặc nhiều phần tử có giá trị chứa hơn 50 ký tự, thì lỗi này sẽ được gửi.

Chẩn đoán

  1. Kiểm tra thông báo lỗi để xác định tên chính sách và số dòng bị vượt quá độ dài chuỗi. Trong ví dụ sau, tên chính sách là dòng JSON-Threat-Protection-1 and trong tải trọng 3.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length at line 3
    
  2. Ghi lại giá trị được chỉ định cho phần tử <StringValueLength> trong (được xác định ở Bước 1).

    Trong ví dụ sau về chính sách JSONThreatProtection, <StringValueLength> được đặt thành 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. Kiểm tra số dòng cụ thể (được xác định ở Bước 1) của tải trọng đầu vào và kiểm tra xem độ dài của giá trị có lớn hơn số ký tự được chỉ định cho phần tử <StringValueLength> (được xác định ở Bước 2) hay không. Nếu độ dài của giá trị vượt quá giới hạn, thì đó là nguyên nhân gây ra lỗi.

    Dưới đây là ví dụ về tải trọng đầu vào:

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

    Tải trọng JSON hiển thị ở trên có một đối tượng tên là Place Name, giá trị Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu của đối tượng này có 85 ký tự ở dòng 3. Vì độ dài của giá trị lớn hơn 50, giá trị được chỉ định trong phần tử <StringValueLength>, nên bạn sẽ gặp lỗi sau:

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

Độ phân giải

Nếu chính sách JSONThreatProtection dùng để bảo vệ khỏi các tải trọng có giá trị vượt quá một độ dài chuỗi cụ thể, thì thông báo lỗi sẽ xuất hiện. Trong trường hợp này, bạn không cần làm gì thêm.

Tuy nhiên, nếu bạn xác định rằng có thể chỉ định độ dài giá trị dài hơn trong tải trọng, hãy sửa đổi <StringValueLength> thành một giá trị phù hợp dựa trên yêu cầu của bạn.

Ví dụ: Nếu bạn cho rằng mình có thể cho phép một giá trị có độ dài tối đa là 90, hãy sửa đổi chính sách như sau:

<?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>

Không phải là đối tượng JSON hợp lệ

Nội dung phản hồi lỗi

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

Ví dụ về nội dung phản hồi lỗi

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

Nguyên nhân

Lỗi này xảy ra nếu tải trọng thông báo đầu vào do phần tử <Source> chỉ định trong chính sách JSONThreatProtection không phải là đối tượng JSON hợp lệ.

Chẩn đoán

  1. Kiểm tra thông báo lỗi để xác định tên chính sách và số dòng xảy ra lỗi. Trong ví dụ sau, tên chính sách là dòng JSON-Threat-Protection-1 and trong tải trọng 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. Kiểm tra số dòng cụ thể (được xác định ở Bước 1) của tải trọng đầu vào và kiểm tra xem đối tượng JSON đã được truyền trong tải trọng có thực sự là đối tượng JSON hợp lệ hay không.

    Dưới đây là ví dụ về tải trọng đầu vào:

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

    Trong tải trọng JSON hiển thị ở trên, dòng 3 không có ":" (dấu hai chấm). Vì đây không phải là đối tượng JSON hợp lệ nên bạn sẽ gặp lỗi:

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

Độ phân giải

Đảm bảo rằng tải trọng JSON đầu vào hợp lệ được truyền đến bất kỳ Proxy API nào có chính sách JSONThreatProtection.

Đối với ví dụ được mô tả ở trên, hãy sửa đổi tải trọng JSON như sau:

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

SourceUnavailable

Mã lỗi

steps.jsonthreatprotection.SourceUnavailable

Nội dung phản hồi về lỗi

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

Ví dụ về nội dung phản hồi lỗi

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

Nguyên nhân

Lỗi này xảy ra nếu biến message được chỉ định trong phần tử <Source> của chính sách JSONThreatProtection là:

  • Không thuộc phạm vi (không có trong luồng cụ thể mà chính sách đang được thực thi)
  • Không phải là một trong các giá trị hợp lệ request, response hoặc message

Ví dụ: lỗi này xảy ra nếu phần tử <Source> trong chính sách được đặt thành một biến không tồn tại trong luồng thực thi chính sách.

Chẩn đoán

  1. Xác định tên chính sách và tên biến Nguồn trong thông báo lỗi. Ví dụ: trong thông báo lỗi sau đây, tên chính sách là JSON-Threat-Protection-1 và biến Nguồn là requests:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. Kiểm tra giá trị được chỉ định cho phần tử <Source> được xác định trong Bước 1.

    Trong ví dụ sau về chính sách JSONThreatProtection, phần tử <Source> được đặt thành 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>
    

    Các giá trị hợp lệ cho phần tử <Source>request, response hoặc message. Vì requests không phải là giá trị hợp lệ và không tồn tại trong luồng mà chính sách đang được thực thi, nên bạn sẽ gặp lỗi:

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

Độ phân giải

Đảm bảo rằng biến được đặt trong phần tử <Source> của chính sách JSONThreatProtection không thành công được đặt thành request, response hoặc message và tồn tại trong luồng mà chính sách thực thi.

Để sửa chính sách JSONThreatProtection mẫu ở trên, bạn có thể sửa đổi phần tử <Source> để sử dụng biến request, vì biến này tồn tại trong luồng yêu cầu:

<?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

Mã lỗi

steps.jsonthreatprotection.NonMessageVariable

Nội dung phản hồi về lỗi

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

Ví dụ về nội dung phản hồi lỗi

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

Nguyên nhân

Lỗi này xảy ra nếu phần tử <Source> trong chính sách JSONThreatProtection được đặt thành một biến không thuộc loại message.

Biến loại thông báo đại diện cho toàn bộ yêu cầu và phản hồi HTTP. Yêu cầu, phản hồi và thông báo của biến luồng Apigee Edge tích hợp là loại thông báo. Để tìm hiểu thêm về biến thông báo, hãy xem Tài liệu tham khảo về biến.

Chẩn đoán

  1. Xác định tên chính sách JSONThreatProtection và tên biến Source (Nguồn) trong thông báo lỗi. Ví dụ: trong thông báo lỗi sau, tên chính sách là JSON-Threat-Protection-1 và biến Nguồn là message.content:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. Kiểm tra phần tử <Source> của chính sách JSONThreatProtection (đã xác định ở Bước 1).

    Trong ví dụ sau đây về chính sách JSONThreatProtection, <Source> được đặt thành message.content thay vì 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 không phải là loại thông báo, nên bạn sẽ gặp lỗi:

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

Độ phân giải

Đảm bảo rằng phần tử <Source> trong chính sách JSONThreatProtection không thành công được đặt thành biến flow loại message tồn tại trong flow mà chính sách thực thi.

Để sửa chính sách, bạn có thể sửa đổi phần tử <Source> để chỉ định một biến thuộc loại thông báo. Ví dụ: trong JSONThreatProtection không thành công, bạn có thể chỉ định phần tử <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>