<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: | 선택사항 |
유형: |
정수 |
오류 참조
이 섹션에서는 반환되는 오류 코드, 오류 메시지, 그리고 이 정책이 오류를 트리거할 때 Edge에서 설정하는 오류 변수를 설명합니다. 오류를 처리하기 위해 오류 규칙을 개발 중인 경우, 이 정보는 중요합니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항 및 오류 처리를 참조하세요.
런타임 오류
이러한 오류는 정책이 실행될 때 발생할 수 있습니다.
오류 코드 | HTTP 상태 | 원인 | 해결 |
---|---|---|---|
steps.xmlthreatprotection.ExecutionFailed |
500 | XMLThreatProtection 정책은 다양한 유형의 ExecutionFailed 오류를 발생시킬 수 있습니다. 이러한 오류의 대부분은 정책에 설정된 특정 임계값을 초과할 때 발생합니다. 이러한 오류의 유형에는 요소 이름 길이, 하위 요소 수, 노드 깊이, 속성 수, 속성 이름 길이 등이 포함됩니다. XMLThreatProtection 정책 런타임 오류 문제 해결 주제에서 전체 목록을 확인할 수 있습니다. | build |
steps.xmlthreatprotection.InvalidXMLPayload |
500 | 이 오류는 XMLThreatProtection 정책의 <Source> 요소에서 지정한 입력 메시지 페이로드가 유효한 XML 문서가 아닌 경우 발생합니다. |
build |
steps.xmlthreatprotection.SourceUnavailable |
500 | 이 오류는 <Source> 요소에 지정된 메시지 변수가 다음 중 하나일 때 발생합니다.
|
build |
steps.xmlthreatprotection.NonMessageVariable |
500 | 이 오류는 <Source> 요소가 메시지 유형이 아닌 변수로 설정된 경우에 발생합니다. |
build |
참고:
- 오류 이름 ExecutionFailed는 기본 오류 이름이며 감지된 오류 유형 하지만 이 기본값을 변경하려면 조직 수준 속성을 사용할 수 있습니다. 이 속성을 설정하면 오류 이름에 오류가 발생했습니다. 예: 'TextExceeded' 또는 'AttrValueExceeded'입니다. 사용 참고사항에서 다음을 참조하세요. 확인하세요.
- 500 HTTP 상태가 기본값입니다. HTTP 상태를 400으로 변경하여 요청 흐름 오류를 방지할 수 있습니다. 사용 참고사항에서 다음을 참조하세요. 확인하세요.
배포 오류
없음
오류 변수
이러한 변수는 런타임 오류가 발생하면 설정됩니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항을 참조하세요.
변수 | 위치 | 예 |
---|---|---|
fault.name="fault_name" |
fault_name은 위의 런타임 오류 표에 나열된 오류 이름입니다. 오류 이름은 오류 코드의 마지막 부분입니다. | fault.name Matches "SourceUnavailable" |
xmlattack.policy_name.failed |
policy_name은 오류를 발생시킨 정책의 사용자 지정 이름입니다. | xmlattack.XPT-SecureRequest.failed = true |
오류 응답 예시
{ "fault": { "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2", "detail": { "errorcode": "steps.xmlthreatprotection.ExecutionFailed" } } }
오류 규칙 예시
<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">