<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
대상
XML 취약점을 해결하고 API의 공격을 최소화합니다. 구성된 제한 항목을 기반으로 XML 페이로드 공격을 감지하세요. 다음 접근 방식을 사용한 XML 위협 차단
- XML 스키마(
.xsd
)를 기준으로 메시지 유효성 검사 - 제외할 특정 키워드 또는 패턴의 메시지 콘텐츠 평가
- 메시지가 파싱되기 전에 손상되거나 잘못된 메시지 감지
요소 참조
요소 참조는 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> 속성
<XMLThreatProtection async="false" continueOnError="false" enabled="true" name="XML-Threat-Protection-1">
다음 표는 모든 정책 상위 요소의 공통 속성에 대해 설명합니다.
속성 | 설명 | 기본값 | 현재 상태 |
---|---|---|---|
name |
정책의 내부 이름입니다. 원하는 경우 |
해당 없음 | 필수 |
continueOnError |
정책이 실패할 경우 오류가 반환되도록 하려면 정책이 실패해도 흐름 실행이 계속되도록 하려면 |
거짓 | 선택사항 |
enabled |
정책을 시행하려면 정책을 중지하려면 |
참 | 선택사항 |
async |
이 속성은 지원이 중단되었습니다. |
거짓 | 지원 중단됨 |
<DisplayName> 요소
name
속성 외에도 이 요소를 사용하여 관리 UI 프록시 편집기의 정책에 다른 자연어 이름으로 라벨을 지정합니다.
<DisplayName>Policy Display Name</DisplayName>
기본값 |
해당 없음 이 요소를 생략하면 정책 |
---|---|
현재 상태 | 선택사항 |
유형 | 문자열 |
<NameLimits> 요소
정책에서 검토하고 적용할 글자 수 제한을 지정합니다.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
기본값: | 해당 사항 없음 |
Presence: | 선택사항 |
유형: | 해당 사항 없음 |
<NameLimits>/<Element> 요소
XML 문서의 모든 요소 이름에 허용되는 최대 문자 수에 대한 제한을 지정합니다.
예를 들어 다음 XML을 고려해 보세요.
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
위 XML을 분석할 때 아래 정책 스니펫의 <Element>
요소 값은 요소 이름(book
, title
, author
, year)
)의 유효성을 검사하며 10
자를 초과할 수 없습니다.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: | 정수 |
<NameLimits>/<Attribute> 요소
XML 문서의 모든 속성 이름에 허용되는 최대 문자 수에 대한 제한을 지정합니다.
예를 들어 다음 XML을 고려해 보세요.
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>
위 XML을 분석할 때 아래 정책 스니펫의 <Attribute>
요소 값은 속성 이름 category
가 10
자를 초과하지 않는지 확인합니다.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: | 정수 |
<NameLimits>/<NamespacePrefix> 요소
XML 문서의 네임스페이스 프리픽스에 허용되는 최대 문자 수에 대한 제한을 지정합니다.
예를 들어 다음 XML을 고려해 보세요.
<ns1:myelem xmlns:ns1="http://ns1.com"/>
위 XML을 분석할 때 아래 정책 스니펫의 <NamespacePrefix>
요소 값은 네임스페이스 프리픽스 ns1
이 10
자를 초과하지 않는지 확인합니다.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: | 정수 |
<NameLimits>/<ProcessingInstructionTarget> 요소
XML 문서의 모든 처리 지침 대상에서 허용되는 최대 문자 수에 대한 제한을 지정합니다.
예를 들어 다음 XML을 고려해 보세요.
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
위 XML을 분석할 때 아래 정책 스니펫의 <ProcessingInstructionTarget>
요소 값은 처리 명령 대상 xml-stylesheet
가 10
자를 초과하지 않는지 확인합니다.
<NameLimits> <Element>10</Element> <Attribute>10</Attribute> <NamespacePrefix>10</NamespacePrefix> <ProcessingInstructionTarget>10</ProcessingInstructionTarget> </NameLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: | 정수 |
<Source> 요소
XML 페이로드 공격에 대해 검사할 메시지입니다. 클라이언트 앱에서 인바운드 요청을 검증해야 하므로, 이 요소는 request
로 설정하는 것이 가장 일반적입니다.
이 요소는 message
로 설정하면 요청 흐름에 연결될 때 자동으로 요청 메시지를 평가하고 응답 흐름에 연결될 때 응답 메시지를 자동으로 평가합니다.
<Source>request</Source>
기본값: | 요청 |
Presence: | 선택사항 |
유형: |
문자열.
|
<StructuralLimits> 요소
정책에서 검토하고 적용할 구조 제한을 지정합니다.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
기본값: | 해당 사항 없음 |
Presence: | 선택사항 |
유형: | 해당 사항 없음 |
<StructuralLimits>/<NodeDepth> 요소
XML에서 허용되는 최대 노드 깊이를 지정합니다.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: |
정수 |
<StructuralLimits>/<AttributeCountPerElement> 요소
모든 요소에 허용되는 최대 속성 수를 지정합니다.
예를 들어 다음 XML을 고려해 보세요.
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>위의 XML을 분석할 때
<AttributeCountPerElement>
요소 값은
아래 정책 스니펫에서 book
, title
,
author
및 year
에는 각각 2
개가 넘는 속성이 없습니다.
네임스페이스 정의에 사용되는 속성은 계산되지 않습니다.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: |
정수 |
<StructuralLimits>/<NameSpaceCountPerElement> 요소
모든 요소에 허용되는 네임스페이스 정의의 최대 개수를 지정합니다.
예를 들어 다음 XML을 고려해 보세요.
<e1 attr1="val1" attr2="val2"> <e2 xmlns="http://apigee.com" xmlns:yahoo="http://yahoo.com" one="1" yahoo:two="2"/> </e1>
위 XML을 분석할 때 아래 정책 스니펫의 <NamespaceCountPerElement>
요소 값은 e1
및 e2
요소에 각각 2
개를 초과하는 네임스페이스 정의가 없는지 확인합니다. 이 경우 <e1>에 네임스페이스 정의가 0개 있고 <e2>에 네임스페이스 정의가 2개(xmlns="http://apigee.com"
, 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>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: |
정수 |
<StructuralLimits>/<ChildCount> 요소
모든 요소에 허용되는 하위 요소의 최대 개수를 지정합니다.
<StructureLimits> <NodeDepth>5</NodeDepth> <AttributeCountPerElement>2</AttributeCountPerElement> <NamespaceCountPerElement>3</NamespaceCountPerElement> <ChildCount includeComment="true" includeElement="true" includeProcessingInstruction="true" includeText="true">3</ChildCount> </StructureLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: |
정수 |
속성
속성 | 기본 | Presence |
---|---|---|
includeComment | 참 | 선택사항 |
includeElement | 참 | 선택사항 |
includeProcessingInstructions | 참 | 선택사항 |
includeText | 참 | 선택사항 |
<ValueLimits> 요소
정책에서 검사하고 적용할 값의 글자 수 제한을 지정합니다.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
기본값: | 해당 사항 없음 |
Presence: | 선택사항 |
유형: |
해당 사항 없음 |
<ValueLimits>/<Text> 요소
XML 문서에 있는 모든 텍스트 노드의 글자 수 제한을 지정합니다.
예를 들어 다음 XML을 고려해 보세요.
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>위의 XML을 분석할 때 정책의
<Text>
요소 값
아래 스니펫은 요소 텍스트 값 Learning XML
, Erik T.
Ray,
, 2003
가 각각 15
자를 초과하지 않는지 확인합니다.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: |
정수 |
<ValueLimits>/<Attribute> 요소
XML 문서에 있는 모든 속성 값의 글자 수 제한을 지정합니다.
예를 들어 다음 XML을 고려해 보세요.
<book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>위의 XML을 분석할 때 정책의
<Attribute>
요소 값
아래 스니펫은 속성 값 WEB
이(가) 다음을 초과하지 않는지 확인합니다.
10
자
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: |
정수 |
<ValueLimits>/<NamespaceURI> 요소
XML 문서에 있는 네임스페이스 URI의 글자 수 제한을 지정합니다.
예를 들어 다음 XML을 고려해 보세요.
<ns1:myelem xmlns:ns1="http://ns1.com"/>위의 XML을 분석할 때
<NamespaceURI>
요소 값은
아래 정책 스니펫은 네임스페이스 URI 값 http://ns1.com
이(가) 하는지 확인합니다.
10
자를 초과할 수 없습니다.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: |
정수 |
<ValueLimits>/<Comment> 요소
XML 문서에 있는 모든 댓글에 대한 글자 수 제한을 지정합니다.
예를 들어 다음 XML을 고려해 보세요.
<book category="WEB"> <!-- This is a comment --> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> </book>위의 XML을 분석할 때 정책의
<Comment>
요소 값
아래 스니펫은 댓글 텍스트 This is a comment
가 다음을 초과하지 않는지 확인합니다.
10
자
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: |
정수 |
<ValueLimits>/<ProcessingInstructionData> 요소
XML 문서에 있는 모든 처리 안내 텍스트의 글자 수 제한을 지정합니다.
예를 들어 다음 XML을 고려해 보세요.
<?xml-stylesheet type="text/xsl" href="style.xsl"?>위의 XML을 분석할 때
<ProcessingInstructionData>
요소는
값은 처리 안내 텍스트가
type="text/xsl" href="style.xsl"
은(는) 10
자를 초과할 수 없습니다.
<ValueLimits> <Text>15</Text> <Attribute>10</Attribute> <NamespaceURI>10</NamespaceURI> <Comment>10</Comment> <ProcessingInstructionData>10</ProcessingInstructionData> </ValueLimits>
기본값: | 제한을 지정하지 않으면 시스템은 무제한과 동일한 기본값 -1 을 적용합니다. |
Presence: | 선택사항 |
유형: |
정수 |
오류 참조
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>
스키마
사용 참고사항
온라인 데이터를 받는 모든 서버는 악의적이든 의도하지 않은 것이든 관계없이 공격의 대상이 됩니다. 일부 공격에서는 백엔드 시스템을 손상시킬 가능성이 있는 잘못된 문서를 생성하여 XML의 유연성을 활용합니다. 손상되거나 매우 복잡한 XML 문서가 있으면 서버가 사용가능한 것보다 많은 메모리를 할당하게 하여, CPU 및 메모리 리소스를 연결하고, 파서가 다운되고, 일반적으로 메시지 처리를 일반적으로 애플리케이션 수준의 서비스 거부 공격이 발생할 수 있습니다.
위협 방지 오류 구성
이 정책에 대한 FaultRules를 만드는 경우 관련 중요 정보:
기본적으로 Edge에서 HTTP 500 내부 서버 오류 상태 코드 및 ExecutionFailed 오류가 발생함
메시지가 JSON 또는 XML 위협 보호 정책을 통과하지 못하면 코드를 다시 작성할 수 있습니다. 새로운 조직 수준 속성으로 이 오류 동작을 변경할 수 있습니다. 조직 속성 features.isPolicyHttpStatusEnabled
를 true로 설정하면 다음과 같은 동작이 발생합니다.
- 요청: 위협 방지 정책이 모든 요청 흐름에 연결되어 잘못된 메시지는 ExecutionFailed뿐 아니라 해당 정책 오류 코드와 함께 400 잘못된 요청 상태 코드를 반환합니다.
- 응답: 위협 방지 정책이 모든 응답 흐름에 연결되어 잘못된 메시지는 여전히 500 내부 서버 오류 상태 코드를 반환하고 ExecutionFailed뿐 아니라 해당하는 정책 오류 코드 중 하나를 반환합니다.
Cloud 고객은 Apigee Edge 지원팀에 문의하여 조직 속성으로 이동합니다.
<ph type="x-smartling-placeholder">