Chính sách về mối đe dọa JSON

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

Nội dung

Giảm thiểu rủi ro phát sinh từ các cuộc tấn công ở cấp độ nội dung bằng cách cho phép bạn chỉ định giới hạn cho nhiều Các cấu trúc JSON, chẳng hạn như mảng và chuỗi.

Video: Xem một video ngắn để tìm hiểu thêm về cách Chính sách JSONThreatProtection cho phép bạn bảo vệ API khỏi các cuộc tấn công ở cấp độ nội dung.

Video: Xem video ngắn này về nền tảng API trên nhiều đám mây của Apigee.

Tham chiếu phần tử

Tài liệu tham khảo phần tử mô tả các phần tử và thuộc tính của JSONThreatProtection .

<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
   <DisplayName>JSONThreatProtection 1</DisplayName>
   <ArrayElementCount>20</ArrayElementCount>
   <ContainerDepth>10</ContainerDepth>
   <ObjectEntryCount>15</ObjectEntryCount>
   <ObjectEntryNameLength>50</ObjectEntryNameLength>
   <Source>request</Source>
   <StringValueLength>500</StringValueLength>
</JSONThreatProtection>

&lt;JSONThreatProtection&gt; thuộc tính

<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1"> 

Bảng sau đây mô tả những thuộc tính chung cho tất cả phần tử mẹ của chính sách:

Thuộc tính Mô tả Mặc định Sự hiện diện
name

Tên nội bộ của chính sách. Giá trị của thuộc tính name có thể chứa chữ cái, số, dấu cách, dấu gạch nối, dấu gạch dưới và dấu chấm. Giá trị này không được vượt quá 255 ký tự.

(Không bắt buộc) Bạn có thể dùng phần tử <DisplayName> để gắn nhãn chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng tên ngôn ngữ tự nhiên khác.

Không áp dụng Bắt buộc
continueOnError

Đặt thành false để trả về lỗi khi chính sách không thành công. Điều này là dự kiến đối với hầu hết các chính sách.

Đặt thành true để tiếp tục thực thi luồng ngay cả sau khi có chính sách không thành công.

false Không bắt buộc
enabled

Hãy đặt thành true để thực thi chính sách này.

Đặt thành false để tắt chính sách này. Chính sách này sẽ không được thực thi ngay cả khi luồng đó vẫn được liên kết với một luồng.

đúng Không bắt buộc
async

Thuộc tính này không được dùng nữa.

false Không được dùng nữa

&lt;DisplayName&gt; phần tử

Hãy sử dụng cùng với thuộc tính name để gắn nhãn chính sách trong phần trình chỉnh sửa proxy giao diện người dùng quản lý có tên ngôn ngữ tự nhiên khác.

<DisplayName>Policy Display Name</DisplayName>
Mặc định

Không áp dụng

Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính name của chính sách sẽ là đã sử dụng.

Sự hiện diện Không bắt buộc
Loại Chuỗi

&lt;ArrayElementCount&gt; phần tử

Chỉ định số lượng phần tử tối đa được phép trong một mảng.

<ArrayElementCount>20</ArrayElementCount>
Mặc định: Nếu bạn không chỉ định phần tử này hoặc nếu bạn chỉ định một số nguyên âm, hệ thống không thực thi giới hạn.
Sự hiện diện: Không bắt buộc
Loại: Số nguyên

&lt;ContainerDepth&gt; phần tử

Chỉ định chiều sâu tối đa của vùng chứa được phép, trong đó vùng chứa là các đối tượng hoặc mảng. Ví dụ: một mảng chứa một đối tượng có chứa một đối tượng sẽ dẫn đến việc ngăn chặn độ sâu 3.

<ContainerDepth>10</ContainerDepth>
Mặc định: Nếu bạn không chỉ định phần tử này hoặc nếu bạn chỉ định một số nguyên âm, hệ thống không áp dụng bất kỳ giới hạn nào.
Sự hiện diện: Không bắt buộc
Loại: Số nguyên

&lt;ObjectEntryCount&gt; phần tử

Chỉ định số lượng mục tối đa được phép trong một đối tượng.

<ObjectEntryCount>15</ObjectEntryCount>
Mặc định: Nếu bạn không chỉ định phần tử này hoặc nếu bạn chỉ định một số nguyên âm, hệ thống không áp dụng bất kỳ giới hạn nào.
Sự hiện diện: Không bắt buộc
Loại: Số nguyên

&lt;ObjectEntryNameLength&gt; phần tử

Chỉ định độ dài chuỗi tối đa được phép cho tên thuộc tính trong một đối tượng.

<ObjectEntryNameLength>50</ObjectEntryNameLength>
Mặc định: Nếu bạn không chỉ định phần tử này hoặc nếu bạn chỉ định một số nguyên âm, hệ thống không thực thi giới hạn.
Sự hiện diện: Không bắt buộc
Loại: Số nguyên

&lt;Source&gt; phần tử

Thông báo cần được sàng lọc để phát hiện các cuộc tấn công tải trọng JSON. Thường được đặt thành request, vì thông thường, bạn cần xác thực các yêu cầu gửi đến từ ứng dụng khách. Khi bạn đặt thành message, phần tử này sẽ tự động đánh giá thông báo yêu cầu khi được đính kèm vào luồng yêu cầu và thông báo phản hồi khi được đính kèm vào phản hồi luồng.

<Source>request</Source>
Mặc định: request
Sự hiện diện: Không bắt buộc
Loại:

Chuỗi.

Các giá trị hợp lệ: yêu cầu, phản hồi hoặc tin nhắn.

&lt;StringValueLength&gt; phần tử

Chỉ định độ dài tối đa được phép cho một giá trị chuỗi.

<StringValueLength>500</StringValueLength>
Mặc định: Nếu bạn không chỉ định phần tử này hoặc nếu bạn chỉ định một số nguyên âm, hệ thống không thực thi giới hạn.
Sự hiện diện: Không bắt buộc
Loại: Số nguyên

Tham chiếu lỗi

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.jsonthreatprotection.ExecutionFailed 500 The JSONThreatProtection policy can throw many different types of ExecutionFailed errors. Most of these errors occur when a specific threshold set in the policy is exceeded. These types of errors include: object entry name length, object entry count, array element count, container depth, string string value length. This error also occurs when the payload contains an invalid JSON object.
steps.jsonthreatprotection.SourceUnavailable 500 This error occurs if the message variable specified in the <Source> element is either:
  • Out of scope (not available in the specific flow where the policy is being executed)
  • Is not one of the valid values request, response, or message
steps.jsonthreatprotection.NonMessageVariable 500 This error occurs if the <Source> element is set to a variable which is not of type message.

Deployment errors

None.

Fault variables

These variables are set when this policy triggers an error. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "SourceUnavailable"
jsonattack.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. jsonattack.JTP-SecureRequest.failed = true

Example error response

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

Example fault rule

<FaultRule name="JSONThreatProtection Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ExecutionFailed") </Condition>
    </Step>
    <Condition>(jsonattack.JPT-SecureRequest.failed = true) </Condition>
</FaultRule>

Giản đồ

Lưu ý về cách sử dụng

Giống như các dịch vụ dựa trên XML, những API hỗ trợ ký hiệu đối tượng JavaScript (JSON) dễ bị tấn công tấn công cấp nội dung. Các cuộc tấn công JSON đơn giản cố sử dụng các cấu trúc làm choáng ngợp trình phân tích cú pháp JSON để xảy ra sự cố một dịch vụ và tạo ra các cuộc tấn công từ chối dịch vụ ở cấp ứng dụng. Tất cả các chế độ cài đặt là không bắt buộc và nên được điều chỉnh để tối ưu hoá yêu cầu dịch vụ của bạn so với tiềm năng lỗ hổng bảo mật.

Chủ đề có liên quan

Chính sách JSONtoXML

Chính sách XMLThreatProtection

Chính sách RegularExpressionProtection