#2300 이슈에 더해 추가 개선을 적용합니다.
- 제외되었던 레이아웃 편집기 등에서 PHP 코드 사용 제한
- PHP 코드가 포함되면 요청이 거부되며, 변경사항을 잃을 수 있습니다
- 위지윅 에디터를 통한 글쓰기에는 제한되지 않습니다
- URL 요청 시 parameter에
script 등의 태그 사용 제한
- 일반적으로 영향이 없으나, 특정 플러그인에 따라 링크 또는 주소창에 보여지는 항목에 HTML 태그가 사용되면 제한됩니다
- XE 1 배포본에 포함된 모듈, 레이아웃, 스킨에서 화면에 출력하는 사용자 입력 값 중에 HTML 태그가 포함되면 태그가 적용되지 않고 일반 문자열로 표시됩니다
- 배포본에 포함된 항목에만 적용되며, 배포본에 포함된 파일을 수정하여 특정 값을 출력하는 경우 영향을 받을 수도 있습니다
- 예) 메뉴 설명에 HTML을 입력하고, 배포본에 포함된 XEDITION 레이아웃에 메뉴 설명(HTML)을 출력하는 경우
- 이 사항은 배포본에 포함된 파일을 대상으로하지만, 추후 업데이트에서 플러그인 제작자 또는 사이트 운영자가 선택적으로 이러한 보안 옵션을 사용할 수 있는 기능이 추가될 수 있습니다
템플릿 필터 사용법
@kijin님의 코드로부터 기인한 템플릿 필터 기능이 추가되었으며, 이 기능이 템플릿 보안 향상의 역할을 합니다.
출력 값에 대한 escape 필터를 적용할 수 있으며, 사용 방법은 아래와 같습니다.
escape 필터는 htmlspecialchars() 함수를 사용하는 간소화된 방법입니다.
escape 필터의 종류
- escape : 출력되는 결과물에 htmlspecialchars()가 적용되며, double_encode 옵션은
true입니다
- 일반적으로 사용되지 않을 수 있으며, textarea 필드에 출력될 값이 대상이 될 수 있습니다
- autoescape : 출력되는 결과물에 htmlspecialchars()가 적용되며, double_encode 옵션은
false입니다
- noescape : 별도 처리하지 않고 그대로 출력합니다
각 필터는 아래 <config>를 이용한 일괄 설정에 대한 필터를 개별 항목에 덮어 쓸 수 있습니다.
escape 적용
HTML 템플릿 파일 상단에 아래와 같이 명시하여, 해당 파일에서 출력하는 모든 값에 autoescape 필터를 적용할 수 있습니다.
<config autoescape="on" />
템플릿 전체에 적용하지 않고 일부 출력 값에 적용은 아래와 같습니다.
<div class="content">
{$content|autoescape}
</div>
이 두 방법을 혼용하여, 필터를 덮어 쓰면 아래와 같이 동작합니다.
<!-- 해당 템플릿 파일 전체에 autoescape 필터 적용 -->
<config autoescape="on" />
<div class="content">
<!-- autoescape 필터 적용 -->
<!--
$content = '<strong>내용</strong>'
-> '<strong>내용</strong>'
$content = '홈 > 게시판'
-> '홈 > 게시판' // 변경 없음
-->
{$content|autoescape}
<!-- double_encode=true인 escape 필터 적용 -->
<!--
$content = '<strong>내용</strong>'
-> '&lt;strong&gt;내용&lt;/strong&gt;' // double_encode
$content = '홈 > 게시판'
-> '홈 &gt; 게시판' // double_encode
-->
{$content|escape}
<!-- escape 필터를 적용하지 않음 -->
<!--
$content = '<strong>내용</strong>'
-> '<strong>내용</strong>' // 변경 없음
$content = '홈 > 게시판'
-> '홈 > 게시판' // 변경 없음
-->
{$content|noescape}
</div>
아래와 같이 공백이 포함되지 않도록 주의해야 합니다(아래와 같은 사항은 무시되며, 오류가 발생할 수 있습니다).
{$content | noescape}
{$content| noescape}
{$content |noescape}
즉, pipe 문자(|) 앞 뒤에는 공백이 포함되지 않아야 합니다.
이 변경 사항은 최초 안내한 것처럼 '모든 템플릿 파일'을 대상으로 했던 것과 다르게, XE 1 배포본에 포함돈 파일을 대상으로 합니다.
#2300 이슈에 더해 추가 개선을 적용합니다.
script등의 태그 사용 제한템플릿 필터 사용법
@kijin님의 코드로부터 기인한 템플릿 필터 기능이 추가되었으며, 이 기능이 템플릿 보안 향상의 역할을 합니다.
출력 값에 대한 escape 필터를 적용할 수 있으며, 사용 방법은 아래와 같습니다.
escape 필터는
htmlspecialchars()함수를 사용하는 간소화된 방법입니다.escape 필터의 종류
true입니다false입니다각 필터는 아래
<config>를 이용한 일괄 설정에 대한 필터를 개별 항목에 덮어 쓸 수 있습니다.escape 적용
HTML 템플릿 파일 상단에 아래와 같이 명시하여, 해당 파일에서 출력하는 모든 값에
autoescape필터를 적용할 수 있습니다.템플릿 전체에 적용하지 않고 일부 출력 값에 적용은 아래와 같습니다.
이 두 방법을 혼용하여, 필터를 덮어 쓰면 아래와 같이 동작합니다.
아래와 같이 공백이 포함되지 않도록 주의해야 합니다(아래와 같은 사항은 무시되며, 오류가 발생할 수 있습니다).
{$content | noescape}{$content| noescape}{$content |noescape}즉, pipe 문자(
|) 앞 뒤에는 공백이 포함되지 않아야 합니다.이 변경 사항은 최초 안내한 것처럼 '모든 템플릿 파일'을 대상으로 했던 것과 다르게, XE 1 배포본에 포함돈 파일을 대상으로 합니다.