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
Khắc phục các lỗ hổng bảo mật XML và giảm thiểu các cuộc tấn công vào API của bạn. Phát hiện tải trọng XML (không bắt buộc) dựa trên các giới hạn đã định cấu hình. Sàng lọc các mối đe doạ XML bằng cách sử dụng phương pháp tiếp cận:
- Xác thực thông báo theo lược đồ XML (
.xsd
) - Đánh giá nội dung thông báo cho các từ khoá hoặc mẫu cụ thể để loại trừ
- Phát hiện thư bị lỗi hoặc không đúng định dạng trước khi các thư đó được phân tích cú pháp
Tham chiếu phần tử
Thông tin tham chiếu phần tử mô tả các phần tử và thuộc tính của XMLThreatProtection .
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1"> <DisplayName>XML Threat Protection 1</DisplayName> <NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits> <Source>request</Source> <StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits> <ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits> </XMLThreatProtection>
<XMLThreatProtection> thuộc tính
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-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 (Không bắt buộc) Bạn có thể dùng phần tử |
Không áp dụng | Bắt buộc |
continueOnError |
Đặt thành Đặt thành |
false | Không bắt buộc |
enabled |
Hãy đặt thành Đặt thà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 |
<DisplayName> 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 |
---|---|
Sự hiện diện | Không bắt buộc |
Loại | Chuỗi |
<NameLimits> phần tử
Chỉ định giới hạn ký tự mà chính sách sẽ kiểm tra và thực thi.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
Mặc định: | Không áp dụng |
Sự hiện diện: | Không bắt buộc |
Loại: | Không áp dụng |
<NameLimits>/<Element> phần tử
Chỉ định giới hạn về số lượng ký tự tối đa được phép trong tên phần tử bất kỳ trong XML tài liệu.
Ví dụ: hãy xem xét XML sau:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
Khi phân tích XML ở trên, giá trị phần tử <Element>
trong chính sách
đoạn mã dưới đây sẽ xác thực rằng tên phần tử (book
, title
,
author
và year)
không vượt quá 10
ký tự.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: | Số nguyên |
<NameLimits>/<Attribute> phần tử
Chỉ định giới hạn về số lượng ký tự tối đa được phép trong mọi tên thuộc tính trong Tài liệu XML.
Ví dụ: hãy xem xét XML sau:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
Khi phân tích XML ở trên, giá trị phần tử <Attribute>
trong chính sách
đoạn mã bên dưới sẽ xác thực rằng tên thuộc tính category
không vượt quá
10
ký tự.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: | Số nguyên |
<NameLimits>/<NamespacePrefix> phần tử
Chỉ định giới hạn về số lượng ký tự tối đa được phép cho tiền tố không gian tên trong phần tử Tài liệu XML.
Ví dụ: hãy xem xét XML sau:
<ns1:myelem xmlns:ns1="http://ns1.com"/>
Khi phân tích XML ở trên, giá trị phần tử <NamespacePrefix>
trong
đoạn mã chính sách dưới đây sẽ xác thực rằng tiền tố không gian tên ns1
không vượt quá
10
ký tự.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: | Số nguyên |
<NameLimits>/<ProcessingInstructionTarget> phần tử
Chỉ định giới hạn về số lượng ký tự tối đa được phép trong mục tiêu của bất kỳ các hướng dẫn xử lý trong tài liệu XML.
Ví dụ: hãy xem xét XML sau:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
Khi phân tích XML ở trên, phần tử <ProcessingInstructionTarget>
trong đoạn mã chính sách bên dưới sẽ xác thực rằng mục tiêu hướng dẫn xử lý
xml-stylesheet
không vượt quá 10
ký tự.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: | Số nguyên |
<Source> 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 XML. 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. Chọn trong số |
<StructuralLimits> phần tử
Chỉ định các giới hạn về cấu trúc mà chính sách cần kiểm tra và thực thi.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
Mặc định: | Không áp dụng |
Sự hiện diện: | Không bắt buộc |
Loại: | Không áp dụng |
<StructuralLimits>/<NodeDepth> phần tử
Chỉ định độ sâu nút tối đa được phép trong XML.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: |
Số nguyên |
<StructuralLimits>/<AttributeCountPerElement> phần tử
Chỉ định số lượng thuộc tính tối đa được phép cho một phần tử bất kỳ.
Ví dụ: hãy xem xét XML sau:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<AttributeCountPerElement>
trong đoạn mã chính sách dưới đây sẽ xác thực rằng các thành phần book
, title
,
author
và year
không có nhiều hơn 2
thuộc tính cho mỗi thuộc tính.
Xin lưu ý rằng các thuộc tính dùng để xác định không gian tên sẽ không được tính.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: |
Số nguyên |
<StructuralLimits>/<NameSpaceCountPerElement> phần tử
Chỉ định số lượng định nghĩa không gian tên tối đa được phép cho mọi phần tử.
Ví dụ: hãy xem xét XML sau:
<e1 attr1="val1" attr2="val2"> <e2 xmlns="http://apigee.com" xmlns:yahoo="http://yahoo.com" one="1" yahoo:two="2"/> </e1>
Khi phân tích XML ở trên, giá trị phần tử <NamespaceCountPerElement>
trong đoạn mã chính sách dưới đây sẽ xác thực rằng các thành phần e1
và e2
không có nhiều hơn 2
định nghĩa không gian tên. Trong trường hợp này, <e1> không có định nghĩa không gian tên và
<e2> có 2 không gian tên
định nghĩa: xmlns="http://apigee.com"
và
xmlns:yahoo="http://yahoo.com"
.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: |
Số nguyên |
<StructuralLimits>/<ChildCount> phần tử
Chỉ định số lượng phần tử con tối đa được phép cho một phần tử bất kỳ.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: |
Số nguyên |
Thuộc tính
Thuộc tính | Mặc định | Sự hiện diện |
---|---|---|
includeComment | đúng | Không bắt buộc |
includeElement | đúng | Không bắt buộc |
includeProcessingInstructions | đúng | Không bắt buộc |
includeText | đúng | Không bắt buộc |
<ValueLimits> phần tử
Chỉ định giới hạn ký tự cho các giá trị cần kiểm tra và thực thi theo chính sách.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Mặc định: | Không áp dụng |
Sự hiện diện: | Không bắt buộc |
Loại: |
Không áp dụng |
<ValueLimits>/<Text> phần tử
Chỉ định giới hạn ký tự cho mọi nút văn bản có trong tài liệu XML.
Ví dụ: hãy xem xét XML sau:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Text>
trong chính sách
đoạn mã bên dưới sẽ xác thực rằng mỗi giá trị văn bản phần tử Learning XML
, Erik T.
Ray,
và 2003
không vượt quá 15
ký tự.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: |
Số nguyên |
<ValueLimits>/<Attribute> phần tử
Chỉ định giới hạn ký tự cho mọi giá trị thuộc tính có trong tài liệu XML.
Ví dụ: hãy xem xét XML sau:
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Attribute>
trong chính sách
đoạn mã bên dưới sẽ xác thực rằng giá trị thuộc tính WEB
không vượt quá
10
ký tự.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: |
Số nguyên |
<ValueLimits>/<NamespaceURI> phần tử
Chỉ định giới hạn ký tự cho mọi URI không gian tên có trong tài liệu XML.
Ví dụ: hãy xem xét XML sau:
<ns1:myelem xmlns:ns1="http://ns1.com"/>
<NamespaceURI>
trong
đoạn mã chính sách bên dưới sẽ xác thực rằng giá trị URI không gian tên http://ns1.com
thực hiện
không vượt quá 10
ký tự.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: |
Số nguyên |
<ValueLimits>/<Comment> phần tử
Chỉ định giới hạn ký tự cho mọi nhận xét có trong tài liệu XML.
Ví dụ: hãy xem xét XML sau:
<book category="WEB"> <!-- This is a comment --> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
<Comment>
trong chính sách
đoạn mã bên dưới sẽ xác thực rằng văn bản nhận xét This is a comment
không vượt quá
10
ký tự.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có giới hạn. |
Sự hiện diện: | Không bắt buộc |
Loại: |
Số nguyên |
<ValueLimits>/<ProcessingInstructionData> phần tử
Chỉ định giới hạn ký tự cho mọi văn bản lệnh xử lý có trong XML tài liệu.
Ví dụ: hãy xem xét XML sau:
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<ProcessingInstructionData>
trong đoạn mã chính sách bên dưới sẽ xác thực rằng văn bản hướng dẫn xử lý
type="text/xsl" href="style.xsl"
không vượt quá 10
ký tự.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
Mặc định: | Nếu bạn không chỉ định giới hạn, hệ thống sẽ áp dụng giá trị mặc định là -1 ,
mà hệ thống tương đương với không có 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.xmlthreatprotection.ExecutionFailed |
500 | The XMLThreatProtection 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: element name length, child count, node depth, attribute count, attribute name length, and many others. You can see the complete list in the XMLThreatProtection policy runtime error troubleshooting topic. | build |
steps.xmlthreatprotection.InvalidXMLPayload |
500 |
This error occurs if the input message payload specified by the XMLThreatProtection policy's <Source> element is not a valid XML Document.
|
build |
steps.xmlthreatprotection.SourceUnavailable |
500 |
This error occurs if the message
variable specified in the <Source> element is either:
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 |
This error occurs if the <Source> element is set to a variable which
is not of type
message.
|
build |
Notes:
- The error name ExecutionFailed is the default error name and will be returned regardless of the type of error detected; however, this default can be changed by setting an organization-level property. When this property is set, the error name will reflect the actual error. For example, "TextExceeded" or "AttrValueExceeded". See Usage Notes for details.
- The 500 HTTP status is the default; however, the HTTP Status can be changed to 400 for request flow faults by setting an organization-level property. See Usage Notes for details.
Deployment errors
None.
Fault variables
These variables are set when a runtime error occurs. 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" |
xmlattack.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | xmlattack.XPT-SecureRequest.failed = true |
Example error response
{ "fault": { "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2", "detail": { "errorcode": "steps.xmlthreatprotection.ExecutionFailed" } } }
Example fault rule
<FaultRule name="XML Threat Protection Policy Faults"> <Step> <Name>AM-CustomErrorResponse</Name> <Condition>(fault.name Matches "ExecutionFailed") </Condition> </Step> <Condition>(xmlattack.XPT-SecureRequest.failed = true) </Condition> </FaultRule>
Giản đồ
Lưu ý về cách sử dụng
Bất kỳ máy chủ nào nhận được dữ liệu trực tuyến đều bị tấn công, cho dù là máy chủ độc hại hay không cố ý. Một số cuộc tấn công lợi dụng tính linh hoạt của XML bằng cách xây dựng các tài liệu không hợp lệ, nguy cơ xâm phạm các hệ thống phụ trợ. Tài liệu XML bị hỏng hoặc cực kỳ phức tạp có thể khiến máy chủ phân bổ nhiều bộ nhớ hơn mức có sẵn, kết nối tài nguyên CPU và bộ nhớ, trình phân tích cú pháp sự cố và thường tắt tính năng xử lý thông báo cũng như tạo cấp ứng dụng tấn công từ chối dịch vụ.
Cấu hình lỗi bảo vệ khỏi mối đe doạ
Thông tin quan trọng nếu bạn đang tạo FaultRules cho chính sách này: Bằng cách
mặc định, Edge sẽ gửi mã trạng thái Lỗi máy chủ nội bộ HTTP 500 và lỗi ExecutionFailed
nếu một thông báo không vượt qua được Chính sách bảo vệ mối đe doạ JSON hoặc XML. Bạn có thể thay đổi
hành vi lỗi đó với một thuộc tính cấp tổ chức mới. Khi thiết lập tổ chức
thuộc tính features.isPolicyHttpStatusEnabled
thành true, sau đây
xảy ra:
- Yêu cầu: Có chính sách bảo vệ chống mối đe doạ đính kèm với bất kỳ quy trình yêu cầu nào, thông báo không hợp lệ trả về mã trạng thái 400 Yêu cầu không hợp lệ, cùng với lỗi chính sách tương ứng (thay vì chỉ ExecutionFailed).
- Phản hồi: Chính sách bảo vệ chống lại mối đe doạ đi kèm với bất kỳ quy trình phản hồi nào, thông báo không hợp lệ vẫn trả về mã trạng thái Lỗi máy chủ nội bộ 500 và một trong mã lỗi chính sách tương ứng sẽ được gửi (thay vì chỉ ExecutionFailed).
Khách hàng của Cloud phải liên hệ với Bộ phận hỗ trợ Apigee Edge để đặt thuộc tính tổ chức.