XML: CDATA Sanitize?

tip 2013.04.27 12:44

출처 :

- http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/XML/Q_24814185.html

- http://www.deisys.net/222

 

CDATA 섹션에 허용되는 unicode range 만 남기기

private function strip_invalid_xml_chars( $in ) { 
  
                $out = ""; 
                // Used to hold the output. 
  
                $current; 
                // Used to reference the current character. 
  
                if ( empty($in) ) { 
                        return ""; 
                        // vacancy test. 
                } 
                $length = strlen($in); 
                for ( $i = 0; $i < $length; $i++) { 
                        $current = ord($in{$i}); 
                        if ( ($current == 0x9) || ($current == 0xA) || ($current == 0xD) || (($current >= 0x20) && ($current <= 0xD7FF)) || (($current >= 0xE000) && ($current <= 0xFFFD)) || (($current >= 0x10000) && ($current <= 0x10FFFF))) { 
                                $out .= chr($current); 
                        } else { 
                                $out .= " "; 
                        } 
                } 
                return $out; 
  
        }

'tip' 카테고리의 다른 글

How to repair Windows Update Error 0×80070057 error codes  (0) 2013.04.27
dll , ocx 등록시 0x80020009 에러 발생  (0) 2013.04.27
XML: CDATA Sanitize?  (0) 2013.04.27
http, https 혼용 Ajax 레이어팝업 로그인과 처리  (0) 2013.04.27
CDATA 섹션[XML 표준]  (0) 2013.04.27
svn merge  (0) 2013.04.27
Trackback 0 : Comment 0

http, https 혼용 Ajax 레이어팝업 로그인과 처리

tip 2013.04.27 12:44

[출처] http://itzone.tistory.com/198

 

* 문제 제기1

다른 구현은 둘째치고

http 페이지에 각종 컨트롤 함수를 정의해 놨는데

[v] 보안접속

하고 뭐든 하려 하면

javascript로 http <-> https 상호 처리시 '사용자 권한 없습니다' 오류가 뜬다.

몇시간의 삽질 끝에 한가지 해결을 보았다.


* 문제 제기2

물론 기본 페이지도 https 이고 팝업도 https 이면 아무런 오류도 안나지만

기본적으로 사이트 접속하면 http://xxx.com 이다.

이것을 https 와 혼용해서 쓰려니 골때리는 사건이 발생한다.


* 해결꼼수

-------------------------
 http
 -----------------
  http 레이어팝업

  히든 iframe
 -----------------
-------------------------

위와같은 페이지 구성으로 짜고

http 레이어팝업 = 로그인 폼

로그인 폼의 submit target="{히든 iframe}"

action="https://xxx.com/login_process.asp" 으로 posting!

히든 iframe 안의 https://xxx.com/login_process.asp 에서는

처리가 끝나면

http://xxx.com/popup_close.html 으로 이동시킨다.

http://xxx.com/popup_close.html 에서는

<script type="text/javascript">
//<![CDATA[
    parent.window.{부모창의 레이어팝업 닫는함수}();
//]]>
</script>

 

위와 같은 코드를 사용하면 된다.

'tip' 카테고리의 다른 글

dll , ocx 등록시 0x80020009 에러 발생  (0) 2013.04.27
XML: CDATA Sanitize?  (0) 2013.04.27
http, https 혼용 Ajax 레이어팝업 로그인과 처리  (0) 2013.04.27
CDATA 섹션[XML 표준]  (0) 2013.04.27
svn merge  (0) 2013.04.27
윈도우 7에서 인터넷 연결이 안되다  (0) 2013.04.27
Trackback 0 : Comment 0

CDATA 섹션[XML 표준]

tip 2013.04.27 12:43

[출처] 

http://msdn.microsoft.com/ko-kr/library/ms256076(v=vs.80).aspx

http://insidesearch.tistory.com/entry/XML-CDATA-Section-%EB%8B%A4%EB%A3%A8%EA%B8%B0

 

CDATA 섹션에서는 CDATA 섹션에 의해 포함된 문자에 태그가 없음을 파서에 알릴 수 있습니다. 그러면 태그 문자가 나타날 수 있지만 태그가 필요하지 않은 섹션을 포함하는 문서를 훨씬 쉽게 만들 수 있습니다. CDATA 섹션은 일반적으로 스크립트 언어 내용과 샘플 XML 및 HTML 내용에 사용됩니다.

문서 구조에서 CDATA 섹션은 다음 구문을 사용합니다.

<![CDATA[An in-depth look at creating applications with XML, using <, >,]]>

XML 파서에서 초기 <![CDATA[를 발견한 경우 이를 요소나 엔터티 태그로 해석하지 않고 문자로 뒤에 나오는 내용을 보고합니다. 문자 참조는 CDATA 섹션에서 사용할 수 없습니다. 끝에 ]]>가 있을 경우 파서는 보고를 중지하고 일반 구문 분석으로 돌아갑니다.

예를 들어, 다음 CDATA 섹션 중 하나를 XML 문서에 포함할 수 있습니다. 이때 파서에서는 오류를 보고하지 않습니다.

 
<![CDATA[</this is malformed!</malformed</malformed & worse>]]>
<![CDATA[if (c<10)]]>

 

참고

CDATA 섹션 내의 내용은 XML 내용에 허용되는 문자 범위 내에 있어야 합니다. 제어 문자 및 호환 문자는 이러한 방법으로 이스케이프할 수 없습니다. 또한 ]]> 시퀀스는 섹션의 끝을 알리기 때문에 CDATA 섹션 내에 이 시퀀스를 표시할 수 없습니다. 즉, CDATA 섹션은 중첩될 수 없습니다. 일부 스크립트에서는 이 시퀀스가 표시됩니다. 스크립트 내에서는 일반적으로 ] ]>]]>를 대체할 수 있습니다

 

파싱 오류를 해결하려면 CDATA 섹션안에 들어가면 안되는 unicode range를 print문으로 XML을 덤프할 때 제거해야 한다. 이 unicode range는 XML 스펙 1.0에 다음과 같이 명기되어 있다.

Character Range
[2]   Char    ::=   #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */


CDATA Sections
[18]   CDSect    ::=   CDStart CData CDEnd
[19]   CDStart    ::=   '<![CDATA['
[20]   CData    ::=   (Char* - (Char* ']]>' Char*))
[21]   CDEnd    ::=   ']]>'


위를 보면 CDATA 섹션안의 문자열에는 2가지 들어가지 말아야 하는 조건이 있다.

첫째. CDATA 종료열인 ']]>' 문자열이 들어가면 안된다.
둘째. 유니코드 문자만 포함되어야 한다. 특히, 제어문자들은 포함되지 말아야 한다. 

'tip' 카테고리의 다른 글

XML: CDATA Sanitize?  (0) 2013.04.27
http, https 혼용 Ajax 레이어팝업 로그인과 처리  (0) 2013.04.27
CDATA 섹션[XML 표준]  (0) 2013.04.27
svn merge  (0) 2013.04.27
윈도우 7에서 인터넷 연결이 안되다  (0) 2013.04.27
개발환경 설치  (0) 2013.04.27
Trackback 0 : Comment 0