이 글은 제가 이해하고 잇는 부분만 다루고 있으며 잘못 이해하여 잘못된 전달이 될수도 있습니다만, 개발자 입장에서 공홈글을 바탕으로 설명드리는 것이예요.

 

HTML 코드를 다루다 보면 결국 가장 중요한 부분은 XSS보안 취약점 이슈입니다.

 

간단하게 <script>alert('hi');</script> 이라는 코드를 여러분들이 지금 읽고 있는 것처럼 코드로 안보이고 이것이 실행되면, 저 코드는 보이지 않고 경고 메세지가 뜨는것이죠.

 

이를 활용해서 XE내부 함수를 실행하여 회원관리자 권한 탈취등 보안점에 문제가 생기게 되는것입니다.

 

이를 대부분의 범위가 원래는

 

$oDocument->getContent();

$oDocumentController->insertDocument(); 등등 디비 입력시, 디비 출력시 콘텐츠 내용, 비회원일 경우 이메일, 홈페이지 주소를 적는 input 등등 다양하게 xss취약점을 이용한 공격이 가능한 곳에 모두 htmlspecialchars를 적용했습니다.

 

그래서 그런 해킹당할 수 잇는 위치의 범위를 한정적인 부분에가 아니라 전체를 htmlspecialchars해주겠다는 이야기 입니다.

 

htmlspecialchars 는 스크립트가 들어간 것(<script> <a href="" 등등)들을 알파뱃, 등등 브라우저가 읽기 위한 문자열로 인코딩해주는 함수이다라고 이해하시면 됩니다.

 

이렇게 한정적으로 각각 적용했던 부분을 아래와 같은 3단계 분류로 레이아웃의 변수 및 템플릿 변수에서 포괄적으로 사용하도록 만들겠다는 것입니다.

 

그래서 그 필터의 종류는 아래3개입니다.

escape 필터의 종류

  • escape : 출력되는 결과물에 htmlspecialchars()가 적용되며, double_encode 옵션은 true입니다
    • 일반적으로 사용되지 않을 수 있으며, textarea 필드에 출력될 값이 대상이 될 수 있습니다
  • autoescape : 출력되는 결과물에 htmlspecialchars()가 적용되며, double_encode 옵션은 false입니다
    • HTML이 적용되지 않아야 할 항목에 사용
  • noescape : 별도 처리하지 않고 그대로 출력합니다
    • HTML을 적용해야 할 항목에 사용

 

여기에서 말하는 double_encode 는 개발자만 알아들을 수 있는 용어이긴한데 쉽게 설명드리자면 true이면 <를 보안적으로 인코딩 되어서 &~~~ 같은 문자열이 되었다 하더라도 그중에서 또 <같은문자가 포함되면 한 번 더 코딩하겟다는 옵션이예요.

 

따라서 아래의 이미지와 함께 사용법을 알려드리자면

 

ea3d3d3d510099852b8e9f921eb911e1.png

(이미지출처, XE공식홈페이지의 공지 이미지이며 저작권 사용상 문제가 될 경우 이 이미지는 언제든지 바뀌거나 삭제할 수 있습니다. 꼭 문제가 된다면 알려주세요)

 

위의 이미지를 놓고 보면 이 부분은

Layout.html 파일내의 첫째줄과 content 출력하는 부분입니다.

 

모든 코드를 사용할 필요는 없습니다.

 

<config autoescape="on" />

이 부분을 처음줄에 적용하면 모든 layout 코드 부분을 모두 autoescape 옵션을 추가하겠다는 것입니다. (그 아래 있는 {$content} 부분도 포함이예요 게시판쪽 ㅇㅇ)

 

근데 제가 볼때 대부분 이번 패치가 되신분들은 autoescape 항목이 자동으로 추가되어서 문제가 되신 분들도 있는 것 같아요.

 

그런 분들은 그냥, layout.html 파일 내의 {$content}를 {$content|noescape} 으로 수정하여 사용하도록 하세요.

 

보안상으로는 예전이랑 똑같은 상황으로 만들어줍니다.

 

다만, 이번 보안 패치로 인해서 여러가지 정규식 관련 규칙때문에 이렇게 한들 고쳐지지 않는 코드 노출 및 등등 여러가지 사안이 있을 수 있습니다.

 

이 부분은 열심히 XE-core 에 제보를 통해서 해결해 나갈수 박에 없습니다.

  • Lv30
    서드파티 자료들은 업데이트되어도 기존과 동일하게 출력에 변화가 없는거죠?

    문제가 생긴 곳들이 이번에 업데이트시 함께 업데이트 제공된 내장 레이아웃 때문이겠죠?

    기능 사용 옵션은 제공 한다고 했는데 철회되고 무조건 사용으로 바뀌었나요?
  • ?
    <config autoescape="on" /> 요코드를 layout.ht 최상단에 삽입하면 해당 레이아웃과 결합되어있는 게시판, 위젯, 페이지 등에서 XSS방어가 된다는 의미로 받아들여도 되나요?

    그럼 그냥 common_layout.html 최상단에 삽입해도 괜찮으련지요?
  • ? Lv24
    음 제가 생각하기엔 전체적인 보안 방지로 생각되고 있습니다.

    common_layout.html 파일은 되도록이면 건들지 마세요;;
  • Lv30

    escape 기능이 추가되는 업데이트는
    보안을 강화하고 싶은 곳에 손쉽게 적용할 수 있는 기능 추가이다.

    업데이트시 탬플릿에 해당 기능을 사용하겠다고 직접 추가해주지 않으면 아무런 영향도 없다.

    따라서 사용하는 템플릿들이 이번 업데이트시 함께 배포되는 레아웃이나 위젯이 아니라면 영향이 1도 없다

    이미 사용중인 다른 자료들도 보안을 강화하고 싶은 곳이 있다면 {$변수|autoescape} 이렇게 해주면 취약점이 개선된다.

    제가 최근에 들은 정보로 이해한 것 입니다. 오류가 있나요?

  • Lv30 Lv24
    네 공홈글에 의하면 거의 맞습니다.
  • Lv24 Lv30

    그렇다면 이 글의 내용에 소개되지 않은 기존에 허용되었던 관라자페이지의 스크립트 이용공간 , 각 모듈 레이아웃 설정에서 입력 출력이 허용 되었던 스크립트 사용이 막히는 업데이트 부분이 문제가 되는 상황이겠네요.

    이부분만 다른 방법으로 스크립트 동작을 할지 결정해서 준비한다면 1.11 업데이트 시 문제는 없을 것 같습니다.

     

    https://xetown.com/qna/1090769

  • Lv30 Lv37
    해당 부분은 라이믹스에서만 문제가 되는 것 같습니다. 예전에 라이믹스에서 script 태그를 엄격하게 필터링하도록 해놓았던 것이 이번 XE 보안패치와 엮이면서 의도치 않게 너무 엄격하게 되어 버렸어요. 원래 의도대로 작동하도록 곧 패치할 예정입니다.
  • Lv37 Lv30

    아. 그렇군요. 라이믹스 개발자분의 답변이 그렇게 정해진 것으로 달려서 너무 과도한 보안적용이라는 생각만 했습니다.

    라이믹스에서도 불편없이 사용이 가능하도록 된다면 다행이네요.

  • Lv30 Lv37
    원래 패치한 의도는 링크하신 글에 코노리님이 답변하신 것과 같습니다. 그런데 그 글에 제가 방금 댓글을 추가했듯이, XE 패치가 라이믹스 변경내역과 충돌해서 원래 의도보다 더 엄격하게 필터링이 되어버렸습니다.
  • Lv37 Lv30
    네. 그렇지만 질문하신 분이 물어본건 일반적인 스크립트 사용이 막히는 것을 문의 한 것이니까요. 질문과 답변만 본다면 모든 것이 다 금지 되는 것으로 보입니다.

    이제 어떠한 것이 금지 되는 것인지 알게 되었습니다.
  • ?
    이런 글이 없었다면 업데이트를 생각도 못 했을 겁니다 ㅠ 감사합니다