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 Apigee X.
thông tin

ExecutionFailed

Mã lỗi

steps.jsonthreatprotection.ExecutionFailed

Nội dung phản hồi 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ể gây ra lỗi

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

Loại lỗi Nguyên nhân
Vượt quá độ dài tên mục nhập đối tượng Đã vượt quá độ dài tối đa của chuỗi được phép trong tên mục nhập của một đối tượng.
Vượt quá số lượng mục nhập đối tượng Vượt quá số lượng mục 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á độ sâu của vùng chứa Đã vượt quá độ sâu lồng tối đa cho phép.
Vượt quá độ dài giá trị chuỗi Độ dài tối đa cho phép của 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 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ó một 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 nơi tên mục nhập dài xuất hiện. Ví dụ: trong thông báo lỗi sau, 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à lưu ý 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 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 tên đối tượng vượt quá số đó, thì đó là nguyên nhân gây ra lỗi.

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

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

    Tải trọng JSON ở 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 nhằm mục đích 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 gây ra hậu quả nào, thì 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 rằng bạn có thể cho phép tên đối tượng có độ dài tối đa là 10 ký tự, thì 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ố lượng 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 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 (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ó hơn 5 mục nhập, 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 mà số mục nhập vượt quá. 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 ở 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ố lượng mục đối tượng, thì đó là nguyên nhân gây ra lỗi.

    Sau đâ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 nêu trên, mục thứ 6 xuất hiện ở dòng số 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 chính sách JSONThreatProtection nhằm mục đích bảo vệ chống lạ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 này là điều có thể xảy ra. 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ể đưa thêm các mục nhập đối tượng vào tải trọng mà không gây ra hậu quả nào, thì 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 mình 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 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ử lớn 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ó 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 mà độ dài mảng vượt quá. 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ụ về chính sách JSONThreatProtection sau đây, <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.

    Sau đâ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 nêu trên có 5 phần tử trong mảng có tên là models ở dòng 3. Vì số lượng 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 nhằm mục đích bảo vệ chống lạ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, thì 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 của vùng chứa

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

Lưu lượng truy cập trong thời gian chạy trả về mã phản hồi 500 kèm theo 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ó độ sâu vùng chứa vượt quá độ 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 của vùng chứa là độ sâu lồng nhau 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> là 3, nhưng tải trọng đầu vào có độ sâu vùng chứa vượt quá giới hạn này, 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 nơi độ sâu của vùng chứa vượt quá giới hạn. 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 ở Bước 1).

    Trong ví dụ về chính sách JSONThreatProtection sau đây, <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 của 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 độ sâu của vùng chứa vượt quá số lượng, thì đó là nguyên nhân gây ra lỗi.

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

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

    Tải trọng JSON ở trên có độ sâu vùng chứa là 6 ở dòng 5. Vì độ sâu lớn hơn 5, nên giá trị được chỉ định cho phần tử <ContainerDepth> của chính sách JSONThreatProtection mà bạn nhận được 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 nhằm mục đích bảo vệ chống lại các tải trọng có độ sâu vùng chứa vượt quá giá trị được 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 của 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 các yêu cầu của bạn.

Ví dụ: Nếu bạn cho rằng bạn có thể cho phép độ sâu của vùng chứa lên đến 10, 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 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 số ký tự mà 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ẽ 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 mà độ dài chuỗi vượt quá. Trong ví dụ sau, tên chính sách là JSON-Threat-Protection-1 andline 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ụ về chính sách JSONThreatProtection sau đây, <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.

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

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

    Tải trọng JSON ở trên có một đối tượng tên là Place Name có giá trị Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu gồm 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 nhằm mục đích bảo vệ chống lại các tải trọng có giá trị vượt quá độ 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 bạn có thể cho phép giá trị có độ dài tối đa là 90, 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>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à một đố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 nơi xảy ra lỗi. Trong ví dụ sau, tên chính sách là JSON-Threat-Protection-1 andline 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à một đối tượng JSON hợp lệ hay không.

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

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

    Trong tải trọng JSON ở trên, dòng 3 không có ":" (dấu hai chấm). Vì đây không phải là một đố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 một tải trọng JSON đầu vào hợp lệ được truyền đến mọi API Proxy có chứa 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 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à:

  • Ngoài phạm vi (không có trong quy trình cụ thể nơi 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 mà chính sách được thực thi.

Chẩn đoán

  1. Xác định tên chính sách và tên của biến 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à 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 ở Bước 1.

    Trong ví dụ về chính sách JSONThreatProtection sau đây, 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> là request, response hoặc message. Vì yêu cầu không phải là giá trị hợp lệ và không tồn tại trong quy trình 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 trong ví dụ nê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 có trong quy trình 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 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.

Các biến thuộc 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 về các biến luồng Apigee Edge tích hợp sẵn thuộc loại thông báo. Để tìm hiểu thêm về các 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 của biến 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 (được xác định ở Bước 1).

    Trong ví dụ về chính sách JSONThreatProtection sau đây, <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>
    

    Vì message.content không thuộc 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 luồng thuộc loại message có trong luồng mà chính sách thực thi.

Để điều chỉnh 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> là 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>