Chính sách về mối đe dọa 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

Nội dung

Giảm thiểu rủi ro do 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 đối với nhiều 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 giúp bạn bảo mật API trước các cuộc tấn công ở cấp nội dung.

Video: Mời bạn xem video ngắn này về nền tảng API đa đám mây của Apigee.

Tài liệu tham khảo về phần tử

Tài liệu tham khảo về phần tử mô tả các phần tử và thuộc tính của chính sách 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>

Thuộc tính <JSONThreatProtection>

<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

Phần tử <ArrayElementCount>

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 sẽ không áp dụng giới hạn.
Trạng thái hiện diện: Không bắt buộc
Loại: Số nguyên

Phần tử <ContainerDepth>

Chỉ định độ sâu tối đa được phép của vùng chứa, 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 chứa một đối tượng sẽ dẫn đến độ sâu chứa là 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 sẽ không áp dụng bất kỳ giới hạn nào.
Trạng thái hiện diện: Không bắt buộc
Loại: Số nguyên

Phần tử <ObjectEntryCount>

Chỉ định số 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 sẽ không áp dụng bất kỳ giới hạn nào.
Trạng thái hiện diện: Không bắt buộc
Loại: Số nguyên

Phần tử <ObjectEntryNameLength>

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 sẽ không áp dụng giới hạn.
Trạng thái hiện diện: Không bắt buộc
Loại: Số nguyên

Phần tử <Source>

Thông báo cần được sàng lọc để phát hiện các cuộc tấn công bằng tải trọng JSON. Thông thường, bạn sẽ đặt giá trị này thành request vì thường thì bạn sẽ cần xác thực các yêu cầu đến từ ứng dụng khách. Khi được đặ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 luồng phản hồi.

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

Chuỗi.

Các giá trị hợp lệ: request, response hoặc message.

Phần tử <StringValueLength>

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 sẽ không áp dụng giới hạn.
Trạng thái hiện diện: Không bắt buộc
Loại: Số nguyên

Tham chiếu lỗi

Phần này mô tả các mã lỗi và thông báo lỗi được trả về cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này rất quan trọng nếu bạn đang phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem bài viết Những điều bạn cần biết về lỗi chính sáchXử lý lỗi.

Lỗi thời gian chạy

Những lỗi này có thể xảy ra khi chính sách này thực thi.

Mã lỗi Trạng thái HTTP Nguyên nhân Khắc phục
steps.jsonthreatprotection.ExecutionFailed 500 Chính sách JSONThreatProtection có thể gửi nhiều loại lỗi ExecutionFailed. Hầu hết các lỗi này đều xảy ra khi vượt quá một ngưỡng cụ thể đã đặt trong chính sách. Các bao gồm các loại lỗi sau: độ dài tên mục nhập đối tượng, số lượng mục nhập đối tượng, số lượng phần tử mảng, chiều sâu vùng chứa, độ dài giá trị chuỗi chuỗi. Lỗi này cũng xảy ra khi tải trọng chứa đối tượng JSON không hợp lệ.
steps.jsonthreatprotection.SourceUnavailable 500 Lỗi này xảy ra nếu thông báo biến được chỉ định trong phần tử <Source> là:
  • Ngoài phạm vi (không áp dụng trong quy trình 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
steps.jsonthreatprotection.NonMessageVariable 500 Lỗi này xảy ra nếu phần tử <Source> được đặt thành một biến không thuộc loại tin nhắn.

Lỗi triển khai

Không có.

Biến lỗi

Các biến này được đặt khi chính sách này kích hoạt lỗi. Để biết thêm thông tin, hãy xem bài viết Những điều bạn cần biết về lỗi chính sách.

Biến Trong đó Ví dụ:
fault.name="fault_name" fault_name là tên của lỗi, như được liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. fault.name Matches "SourceUnavailable"
jsonattack.policy_name.failed policy_name là tên do người dùng chỉ định của chính sách gây ra lỗi. jsonattack.JTP-SecureRequest.failed = true

Ví dụ về phản hồi khi gặp lỗi

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

Ví dụ về quy tắc lỗi

<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) rất dễ bị tấn công ở cấp nội dung. Các cuộc tấn công JSON đơn giản cố gắng sử dụng các cấu trúc làm quá tải trình phân tích cú pháp JSON để làm hỏng một dịch vụ và gây 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 đều không bắt buộc và bạn nên điều chỉnh để tối ưu hoá các yêu cầu về dịch vụ của mình trước các lỗ hổng tiềm ẩn.

Chủ đề có liên quan

Chính sách JSONtoXML

Chính sách XMLThreatProtection

Chính sách RegularExpressionProtection