2009-11-13 7 views

답변

8

'취약점'의 의미를 모르지만 많은 사람들이 CDATA 섹션에서 실수를 저질렀습니다. 이것은 게으른 프로그래머가 실제로 텍스트 이스케이프를 이해하지 못하고 XML에 & 인코딩 특수 문자를 인코딩하는 일반적인 프로세스를 피하려고 할 때 발생합니다.

: 그들은 그들이 멀리 얻을 수 있다고 생각 : textstring이의 결과로 ]]> 시퀀스를 포함 할 수 있기 때문에 실제로 마크 업으로 치료를 받고 textstring< 또는 & 문자를 중지합니다

print "<element><![CDATA["+textstring+"]]></element>"; 

이 동안, 그것은 방수 아니다

<element><![CDATA[ Foo ]]> <bar>I'm an unexpected element!</bar> ]]></element> 

이것은 HTML 주입과 마찬가지로 잠재적으로 XSS와 유사한 보안 영향을 줄 수있는 XML 주입입니다.

그래도 CDATA의 일부 시퀀스를 이스케이프해야합니다 (일반적으로 두 개의 CDATA 섹션간에 ]]> 시퀀스를 나눕니다). 실제적으로 CDATA를 사용하는 것은 단지 & - 텍스트 내용을 정상적으로 인코딩하는 것보다 쉽습니다. 그래서 정말로 CDATA 섹션을 사용할 이유가 없습니다.

0

무엇에 취약합니까? 어떤 종류의 주사 공격? CDATA는 구문 분석을하지 않고 내용을 전달하도록 파서에 지시하므로 XML 유효성을 검사하는 경우 CDATA 섹션이 유효성 검사 단계에서 누락되었다고 가정합니다.

XML 스트림을 사용하는 코드에는 스키마 유효성 검사 이외의 비즈니스 유효성 검사가 있어야하므로 사용하기 전에 입력을 확인하지 않으면 위험 할 수 있습니다.

2

CDATA 섹션은 XML 문서에서 문자 데이터를 나타내는 또 다른 방법입니다. 다르게 이스케이프 처리된다는 점을 제외하고는 문서의 다른 (태그가 아닌) 텍스트와 정확히 똑같은 것을 의미합니다.

CDATA와 관련된 추가 "취약점"이 없습니다 (XML 파싱 라이브러리의 버그 제외).

+0

하지만 cdata 요소 사이에 입력 된 텍스트가 파서에 의해 구문 분석되지 않으면 어떻게됩니까? 악의적 인 사용자는 xml 파서가 구문 분석하지 않기 때문에 대상 응용 프로그램의 모든 시스템 명령을 추출하는 데이터를 보관할 수 있습니다. 나는 이것이 일종의 취약성이라고 생각한다. – Madhan

+0

CDATA 섹션의 내용이'&'- 이스케이프 처리되지 않았기 때문에 구문 분석기가 명령을 실행하기 위해 보내면된다는 의미는 아닙니다. 다른 일반 텍스트와 동일한 방식으로 처리됩니다. – bobince

+0

CDATA 블록 *의 데이터가 파서에 의해 구문 분석됩니다. 특히, XML 구문 분석기는']]> 종료 시퀀스를 찾고 있습니다. 그 밖의 모든 것은 문자 데이터로 취급됩니다. –

관련 문제