이 글은 제가 이해하고 잇는 부분만 다루고 있으며 잘못 이해하여 잘못된 전달이 될수도 있습니다만, 개발자 입장에서 공홈글을 바탕으로 설명드리는 것이예요.
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이면 <를 보안적으로 인코딩 되어서 &~~~ 같은 문자열이 되었다 하더라도 그중에서 또 <같은문자가 포함되면 한 번 더 코딩하겟다는 옵션이예요.
따라서 아래의 이미지와 함께 사용법을 알려드리자면
(이미지출처, XE공식홈페이지의 공지 이미지이며 저작권 사용상 문제가 될 경우 이 이미지는 언제든지 바뀌거나 삭제할 수 있습니다. 꼭 문제가 된다면 알려주세요)
위의 이미지를 놓고 보면 이 부분은
Layout.html 파일내의 첫째줄과 content 출력하는 부분입니다.
모든 코드를 사용할 필요는 없습니다.
<config autoescape="on" />
이 부분을 처음줄에 적용하면 모든 layout 코드 부분을 모두 autoescape 옵션을 추가하겠다는 것입니다. (그 아래 있는 {$content} 부분도 포함이예요 게시판쪽 ㅇㅇ)
근데 제가 볼때 대부분 이번 패치가 되신분들은 autoescape 항목이 자동으로 추가되어서 문제가 되신 분들도 있는 것 같아요.
그런 분들은 그냥, layout.html 파일 내의 {$content}를 {$content|noescape} 으로 수정하여 사용하도록 하세요.
보안상으로는 예전이랑 똑같은 상황으로 만들어줍니다.
다만, 이번 보안 패치로 인해서 여러가지 정규식 관련 규칙때문에 이렇게 한들 고쳐지지 않는 코드 노출 및 등등 여러가지 사안이 있을 수 있습니다.
이 부분은 열심히 XE-core 에 제보를 통해서 해결해 나갈수 박에 없습니다.
문제가 생긴 곳들이 이번에 업데이트시 함께 업데이트 제공된 내장 레이아웃 때문이겠죠?
기능 사용 옵션은 제공 한다고 했는데 철회되고 무조건 사용으로 바뀌었나요?