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 do các cuộc tấn công cấp nội dung gây ra bằng cách cho phép bạn chỉ định giới hạn cho các cấu trúc JSON khác nhau, chẳng hạn như mảng và chuỗi.

Video: Hãy xem video ngắn để tìm hiểu thêm về cách chính sách JSONBảo vệ khỏi những mối đe doạ giúp bảo vệ API khỏi các cuộc tấn công ở cấp nội dung.

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

Tham chiếu phần tử

Tài liệu tham chiếu phần tử mô tả các phần tử và thuộc tính của chính sách JSON AeProtection.

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

Các thuộc tính <JSONDataProtection>

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

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

Thuộc tính Nội dung 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ự.

Nếu muốn, bạn có thể sử dụng phần tử <DisplayName> để gắn nhãn cho chính sách này 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 một chính sách không hoạt động. Đây là hành vi dự kiến đối với hầu hết các chính sách.

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

false Không bắt buộc
enabled

Đặt thành true để thực thi chính sách.

Đặ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 chính sách vẫn được đính kèm vào một quy trình.

đú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

Phần tử <DisplayName>

Sử dụng cùng với thuộc tính name để gắn nhãn cho 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 khác theo ngôn ngữ tự nhiên.

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

Không áp dụng

Nếu bạn bỏ qua phần tử này, thì giá trị thuộc tính name của chính sách sẽ được 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 thực thi giới hạn.
Sự hiện diện: Không bắt buộc
Loại: Số nguyên

Phần tử <ContainerWidth>

Chỉ định chiều sâu vùng chứa tối đ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 đối tượng chứa một đối tượng sẽ dẫn đến độ sâu vùng 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.
Sự hiện diện: Không bắt buộc
Loại: Số nguyên

Phần tử <ObjectEntryCount>

Chỉ định số lượng mục nhập 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.
Sự 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 thực thi giới hạn.
Sự 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 kiểm tra để phát hiện các cuộc tấn công tải trọng JSON. Thuộc tính này thường được thiết lập thành request, vì thông thường, bạn sẽ phải 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 quy trình yêu cầu và thông báo phản hồi khi được đính kèm vào quy trình phản hồi.

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

Chuỗi.

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

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

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 đóng vai trò quan trọng trong việc phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem 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 thực thi chính sách.

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

Lỗi triển khai

Không nội dung nào.

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 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ư 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 của chính sách báo lỗi do người dùng chỉ định. jsonattack.JTP-SecureRequest.failed = true

Ví dụ về phản hồi 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, các 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ấn át trình phân tích cú pháp JSON để gây sự cố cho 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ả chế độ cài đặt đều không bắt buộc và cần được điều chỉnh để tối ưu hoá các yêu cầu về dịch vụ nhằm chống lại các lỗ hổng bảo mật tiềm ẩn.

Chủ đề có liên quan

Chính sách của JSONtoXML

Chính sách về mối quan hệ đối tác XML bị đe doạ

Chính sách của RegularExpressionProtection