2009-02-02 3 views
3

XML, 왜 CDATA 섹션에서도 null char이 허용되지 않습니다?CDATA 섹션에서도 null char이 허용되지 않는 이유는 무엇입니까?

바로 파일을 종료하는 것 같습니다.

모든 솔루션? Base64?

+0

좋은 질문입니다. base64 (또는 일부 구분 기호)를 제외한 모든 것을 생각할 수 없습니다. – Srikanth

+0

매우 궁금합니다. 왜 XML 안에 null이 있어야할까요? XML에서 이진 스트림을 보는 것은 놀랍습니다. –

+0

@ João : base64 오버 헤드없이 플래시의 이전 버전에서 이진 데이터를 전송하려고하기 때문에 - http://stackoverflow.com/questions/502857/use-cdata-to-store-raw-binary-streams – Christoph

답변

4

를가 더 valid XML character 없기 때문에, 즉, 그것은 구문 분석 오류가 발생합니다. 이것은 역사적인 이유 (null로 끝나는 문자열) 및 XML의 일반 텍스트 특성으로 인한 것입니다. 유니 코드 가능 편집기가 질식 할 수있는 모든 것은 권장하지 않습니다 ...

1

'파일을 종료하면 안됩니다' 그러나 그것은 well-formedness 오류를 생성해야합니다. 세계의 많은 곳에서 여전히 null로 끝나는 문자열 처리를 사용하고 있기 때문에 허용되지 않습니다. 따라서 \ 0은 처리 체인 아래의 지정되지 않은 일부 지점에서 문제를 일으킬 수 있습니다.

이것은 보안상의 취약점 일 수 있습니다. 과거에는 \ 0을 허용하는 시스템과 터미네이터로 사용하는 시스템의 인터페이스에 의존하는 많은 공격이있었습니다. 따라서 가장 안전한 방법은 단순히 허용하지 않는 것입니다.

다른 제어 문자는 & # ...로 이스케이프 될 수 있습니다. 문자 참조는 XML 1.1의 다른 곳에 있지만 CDATA 절에는 포함되어 있지 않습니다. XML 1.0에서는 제어 문자를 전혀 가져올 방법이 없습니다. 그것은 결국 텍스트 기반의 사람이 읽을 수있는 형식으로되어 있습니다.

Base64?

예. 그러나 대부분 바이너리를 처리하는 경우이를 XML로 캡슐화하는 것이 타당하지 않을 수 있습니다.

+0

반면에 XML 문서에 큰 양의 이진 데이터를 저장해야하는 경우 기본 64 인코딩이이를 수행하는 방법입니다. –

관련 문제