웹마스터 팁
각종 스킨 파일 보호 하기 (HTML 소스 보기 방지법)
2009.03.16 19:50
※ XE 1.5.3.1부터는 적용이 되어 있으니 해당 사항이 없습니다.
안녕하세요. 퍼니엑스이입니다. 사실 오래전에 작성했던 글인데 어느순간 알림이 와서 보니 -수정중- 이라고 적어놓고 오랫동안 수정을 안해놨더라고요ㅠㅠ 그래서 오랜만에 긴 글도 써볼겸 잠깐 시간내서 다시 써보았습니다.
XE의 스킨은 HTML 파일을 작성하는 방식으로 만들어지고 있습니다. 게시판 스킨을 포함해서 레이아웃 스킨 등 PHP 구문을 직접 사용할 필요가 없는 곳 모두가 이에 해당합니다. 흔히 스킨에 새로운 기능을 추가하기 위해 공개된 스킨을 그대로 수정하는데요, 공개된 스킨인 만큼 스킨폴더 주소가 널리 알려져 있습니다. 공개된 스킨이 아니더라도 그래서 다른 분들이 스킨 파일이 위치한 경로를 유추해서 스킨 파일을 그대로 가져갈 수도 있고요.
자세한 설명을 위해 XE 공식 사이트의 소스의 일부분을 그대로 가져와서 보여드리겠습니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="ko" xmlns="http://www.w3.org/1999/xhtml"> <head> <!-- META --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="Generator" content="XpressEngine" /> <!-- TITLE --> <title>자유게시판</title> <!-- CSS --> <link rel="stylesheet" href="http://static.xpressengine.com/core/highway/common/js/plugins/ui/jquery-ui.css" type="text/css" media="all" /> <link rel="stylesheet" href="http://static.xpressengine.com/core/highway/common/css/xe.min.css" type="text/css" media="all" /> <link rel="stylesheet" href="/layouts/xe_v3_sub/xe_v3_sub.css?20120409161721" type="text/css" media="all" /> <link rel="stylesheet" href="/modules/board/skins/xe_v3_default/xe_v3_default.css?20120312182905" type="text/css" media="all" /> <link rel="stylesheet" href="/modules/editor/styles/default/style.css?20120305094452" type="text/css" media="all" /> <link rel="stylesheet" href="/files/faceOff/928/328/019/layout.css?20121025141752" type="text/css" media="all" /> <link rel="stylesheet" href="/modules/ncenter/skins/default/ncenter.css?1.5.3.3.20120706.css" type="text/css" media="all" /> <link rel="stylesheet" href="/modules/ncenter/skins/default/ncenter.black.css?1.5.3.3.20120706.css" type="text/css" media="all" />
12번째 라인을 보면 /modules/board/skins/xe_v3_default/xe_v3_default.css?20120312182905라는 부분이 있습니다.
이걸로 봐서 공식 사이트에서는 xe_v3_default라는 게시판 스킨을 사용하고 있다는 것을 알 수 있습니다.
다른 사이트에 가더라도 /modules/board/skins/로 시작하는 부분을 찾으면 스킨 폴더를 손쉽게 찾을 수 있고 이를 통해 손쉽게 스킨 파일을 가져올 수 있습니다.
만약, xe_v3_default라는 스킨의 목록 소스를 가져오려면 어떻게하면 될까요? (실제로 xe_v3_default 스킨은 게시판 모듈의 공식 배포본에 포함되어 있습니다^^ 굳이 받으려고 애쓰지 않으셔도 됩니다.)
http://www.xpressengine.com/modules/board/skins/xe_v3_default/list.html
위 주소로 접근을 하면 뭔가 깨진 화면이 보이는군요. 네, 이 부분이 게시판 목록 부분입니다. 이것을 XE에서 해석해서 화면에 보여주기 때문에 이쁘장한 게시판을 볼 수 있는거죠ㅎㅎ
소스 보기를 해보시면 소스가 보인다는 것을 아실 겁니다. 부디 이 글을 보고 악용하는 분이 없었으면 좋겠습니다.
그럼 어떻게 하면 소스 보기를 막을 수 있을까요? 방법은 간단합니다.
첫번째 방법
해당 스킨 파일 상단에 아래와 같은 코드를 넣으면 됩니다.
<?php if(!defined('__ZBXE__') && !defined('__XE__')) exit(); ?>
XE는 보안문제로 스킨에서 PHP 구문을 직접 사용하는 것을 권장하지 않고 있습니다만, 사용이 가능하기에 이 방법을 사용하는 것입니다.
다만, 스킨 파일이 많을경우 일일이 다 넣어주어야 합니다.
두번째 방법
위의 방법대로라면 모든 파일을 수정해줘야 하기 때문에 상당히 불편합니다.
.htaccess를 사용하면 쉽게 차단할 수 있더라고요. XE 1.5.3.1부터는 적용이 되어 있으니 해당 사항이 없습니다.
먼저 XE 설치 폴더에 있는 .htaccess 파일을 찾아서 에디터로 열어주세요.
그런 다음 아래와 같은 부분을 찾습니다.
# reserve XE Layout Template Source File (*.html)
RewriteRule ^(layouts|m.layouts)/(.+)\.html$ - [L,F]
그 밑에
# reserve XE Template Source Files (*.html) |
RewriteRule /(skins|m.skins)/(.+)\.html$ - [L,F] 위 소스를 넣어주시면 됩니다. |
댓글 18
-
HB
2013.01.05 16:39
-
퍼니엑스이
2013.01.05 23:16
어라? 워낙 오래전에 쓴 글이라 무슨 글을 적었는지도 모르겠네요. 빠른 시일내에 다시 작성할게요ㅠㅠ
-
HB
2013.01.06 02:47
^^ 스킨html 파일 보안문제로 못보게 하는것 찾다가 이 게시물을 찾게되었었거든요~
크게 부담가지시지 마시고 천천히 하셔도 됩니다ㅎㅎ
-
CMD
2013.01.06 19:44
# reserve XE Layout Template Source File (*.html)RewriteRule ^(layouts|m.layouts)/(.+)\.html$ - [L,F]# reserve XE Template Source Files (*.html)RewriteCond %{REQUEST_URI} !/modules/editor/RewriteRule /(skins|m.skins)/(.+)\.html$ - [L,F].htaccess 파일의 RewriteEngine On 바로 밑에 추가하면 되는데핱브가 nginx 사용 중이라 위 소스가 먹힐지 잘 모르겠네요... -
HB
2013.01.07 05:49
헉....... -
퍼니엑스이
2013.01.07 15:01
오래전에 적용을 해봤었는데요. 레이아웃은 괜찮은데 모듈 관련 파일은 .htaccess로 차단을 하니까 뭔가 제대로 작동이 안되는 것 같더라고요.
-
CM(OEZ)
2013.02.19 17:56
nginx 용으로 변환 가능합니다. CMD님 서버는 제가 담당하고있다는거 ㅋㅋ
-
푸시아
2013.01.07 10:02
smaker 님이 퍼니엑스이님이세요?
-
퍼니엑스이
2013.01.07 14:37
네, 맞습니다^^
-
루노서비스
2013.01.09 20:48
개별접근 불가 라는 소스네요. ㅋㅋ
-
웹엔진
2013.01.09 21:01
HB님이 "언제쯤 수정이 완료되나요?ㅠㅠ"라고 올리고,
퍼니엑스이 님이 "어라? 워낙 오래전에 쓴 글이라 무슨 글을 적었는지도 모르겠네요. 빠른 시일내에 다시 작성할게요ㅠㅠ"라고 하셨을때 쯤, 예상했던 방법대로네요. ㅋ
위처럼 <? ?> 를 사용하지 않고
<!--@if(!defined('__ZBXE__') && !defined('__XE__'))-->{@ exit()}<!--@end-->처럼 사용해도 되지 않나요?위에꺼 안됩니다.
+ 제꺼에서 여러가지 스킨 테스트를 해봤는데.. 전부 403에러 뜨네요.. ㅎㄷ
-
HB
2013.01.09 21:04
html에서 php구문이 동작되지 않도록 되어있는게 기본 세팅인데, 퍼니엑스이 님께서 올려주신방법대로 하려면 웹호스팅의경우 호스팅사에 별도요청을 해야할겁니다. 아마 웹엔진님께서 올린방법대로 하면...제대로 되지않나요??
-
웹엔진
2013.01.09 21:07
아, XE 구문으로 하면, HTML로 볼때 해석이 안되죠 ㅋ
제대로 안되는게 맞네요 ㅋㅋ
-
퍼니엑스이
2013.01.09 21:22
.htaccess로 PHP가 실행되도록 하면 될 것 같네요. 자세한 건 검색해보면 나올 것 같네요.
-
퍼니엑스이
2013.01.09 21:36
확인해보니 XE 1.5.3.1부터 .htaccess에 차단 소스가 들어가 있네요.
http://code.google.com/p/xe-core/source/browse/branches/1.5.3.1/.htaccess
# reserve XE Template Source Files (*.html) RewriteRule /(skins|m.skins)/(.+)\.html$ - [L,F]
이 부분입니다^^
-
HB
2013.01.09 21:05
아무쪼록 오래된 글인데도 수정해주시고 감사합니다!
-
윈컴이
2013.01.26 19:18
으익.. 생각해보니 themes 폴더는 왜 안막아 줬는지 모르겠네요 =_=
이슈 등록이나 하러 가야겠습니다~
-
쿨럭이
2013.02.19 03:35
# reserve XE Template Source Files (*.html) RewriteRule /(skins|m.skins)/(.+)\.html$ - [L,F]
넣어줬는데도 그냥 소스가 보여지는 이유가 ㅠㅠ
언제쯤 수정이 완료되나요?ㅠㅠ