포럼
XE는 하나의 mid에 대해 멀티도메인 적용이 불가하답니다.
2013.04.10 20:23
XE는 하나의 mid에 대해 멀티도메인 적용이 불가하답니다.
한동안 XE를 손놓고 있다가 1.7.3으로 판올림을 한 후에 이런저런 내용을 체크하고 있습니다. 체크 도중에 기존에는 아무런 제약이 없었던 멀티도메인 사용이 앞으로는 어렵다는 이야기를 XE코어팀으로부터 들었습니다.
http://code.google.com/p/xe-core/issues/detail?id=3345
조금 더 정확히 이야기를 해보면 멀티도메인으로 하나의 mid에 접근은 가능하나 게시판 글 등록, 수정이 불가합니다.댓글은 어째서인지 가능합니다. 글 등록, 수정이 불가해진 이유는 CSRF 취약점을 해결하기 위해서인데요. XE이력을 찾아보니 1.5.3.8부터 CSRF 방어 코드의 적용으로 발생된 케이스입니다.
http://www.xpressengine.com/21418510
물론, 가상 사이트를 이용하는 카페기능이나 텍스타일은 서로 다른 mid라는 전제아래에 멀티도메인 적용이 가능합니다.
앞으로 멀티도메인 적용을 못하는것인가
다른 CMS(wordpress, joomla, drupal)의 경우 멀티도메인을 적용을 어떻게 하고 있는지 살펴보았습니다.
http://wordpress.org/support/topic/multiple-domain-with-multisite
http://drupal.org/documentation/install/multi-site
http://docs.joomla.org/Multiple_Domains_and_Web_Sites_in_a_single_Joomla!_installation
위의 경우처럼 다른 CMS는 멀티도메인을 사용하기 위해 코어 수정, 플러그인 적용 등 다양한 방법을 통해 해결책을 제시하고 있습니다.
저는 XE가 다양한 사용자요구를 만족하기 위해 구조적으로 적용불가한 사항도 다양한 가능성을 열어두고 해결책을 모색해야한다고 생각합니다. 꼭 XE코어팀이 이것을 고민하고 해결할 필요는 없지만 위 CMS들의 예시처럼 XE코어는 모듈, 애드온 등의 확장기능을 통해 멀티도메인이 지원이 가능하도록 가능한한 구조가 유연해야한다는게 저의 생각입니다.
여러분의 생각을 들려주세요.
저는 XE가 멀티도메인 적용이 가능해야한다는 입장입니다. 기존에 가능했던 기능이 보안과 기능의 저울질로 한쪽을 포기할 수 밖에 없는게 아니라 기존의 기능을 유지하면서 더욱 다양한 장치가 만들어져야한다고 생각합니다.
저는 그게 버전업이라고 생각합니다.
여러분의 다양한 의견을 듣고 싶습니다.
- [2008/09/02] Blog XE 보안 취약점 긴급 패치 배포합니다. *60
댓글 18
-
푸시아
2013.04.10 21:02
-
라르게덴
2013.04.10 21:22
function insertDocument($obj, $manual_inserted = false, $isRestore = false, $isLatest = true) {
if(!checkCSRF())
{
return new Object(-1, 'msg_invalid_request');
}function checkCSRF()
{
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
return false;
}
// exception blog api write
$act = Context::get('act');
$actList = array('rss'=>1, 'atom'=>1, 'api'=>1);
if(isset($actList[$act]))
{
return true;
}
$defaultUrl = Context::getDefaultUrl();
$referer = parse_url($_SERVER["HTTP_REFERER"]);
$oModuleModel = &getModel('module');
$siteModuleInfo = $oModuleModel->getDefaultMid();
if($siteModuleInfo->site_srl == 0)
{
if(!strstr(strtolower($defaultUrl), strtolower($referer['host'])))
{
return false;
}
}1. 죄송합니다. 제가 모르는 부분이 있다면 지도 부탁드립니다. $manual_inserted = true의 역할과 insertDocument함수 첫로직의 관계점을 모르겠습니다. 다른 행태로 동작하는 곳이 있는지요.
2. CSRF를 무시한다는 건 CSRF 기능의 방어코드를 통과시킨다는 의미인지요.
보안과 기능 두개 모두 만족하는 방법이 나와야지 한쪽을 포기해서는 안된다는게 제 의견입니다.
우선 논하고 싶었던 것은 구체적인 해결방법이전에 XE 보안기능으로 인해 멀티도메인 적용을 하면 안되는건지, 그렇다고해도 사용할 수 있도록 되어야하는건지를 알고 싶었습니다. : )
-
푸시아
2013.04.10 21:41
function insertDocument($obj, $manual_inserted = false, $isRestore = false, $isLatest = true)
{
if(!$manual_inserted && !checkCSRF())
{
return new Object(-1, 'msg_invalid_request');
}1.7의 document 모듈의 코드는 이렇게 바뀌었습니다.
다시말해 $manual_inserted가 거짓이고 checkCSRF() 도 거짓일때만 방어코드가 작동하는 것이겠지요.
하나라도 참이라면 통과시켜주는것이 아닐까요?
따라서 저는 외부프로그램에서 insertDocument를 실행할 경우 manual_inserted 를 true로 놓습니다.
예를들어 자료실에 있는 RSS 업데이트 수집기 모듈의 경우 1.5 후반부에 CSRF 방어가 시작되면서 글 수집이 안되었습니다.
하지만 아마도,
manual_inserted를 참으로 설정하면 작동하지 않을까 싶습니다.
-
라르게덴
2013.04.10 21:48
그렇군요. 제가 여러버전을 띄워두고 보는지라 위 코드를 놓쳤네요 ^^
푸시아님께 몇가지 의견어쭙고 싶은데요.
1. 외부프로그램이 아니라 공식 게시판 모듈을 사용하는 일반 이용자의 경우를 예로 들때 일반인들도 쉽게 적용할 수 있는 옵션이 있는지요?
2. 하나의 mid에 멀티도메인 적용이 가능해야한다고 생각하시는지요?
-
푸시아
2013.04.10 22:01
저는 CSRF가 뭔지도 잘 모릅니다.
다만 이것으로 보안이 좋아지는 것이라고만 알고 있습니다.
1.5후반부에 외부에서 글 입력하려면 checkCSRF에 막혔습니다.
그것을 1.7에서는 가능하도록 풀어준 것이라고 생각하고 있습니다.
1. 무슨 뜻인지 잘 이해를 못하겠습니다 ^^;
2. 저는 버추얼호스트는 이용해도 멀티도메인을 사용하지 않고 사이트를 만들지만 1.7의 바뀐 코드로 인해 원한다면 하나의 mid로도 document 입력이 가능하지 않을까 생각합니다. 다만 그것이 board 모듈같은 형태의 또다른 커스텀board모듈이 되어야 겟고, manual_inserted값을 줘서 컨텐츠를 입력하도록 해야할 것이라는 조건은 있겠지만 말입니다. 줄여 말씀드리면 지금도 board 모듈 말고 별도의 모듈로 가능하다고 생각합니다.
-
delphiXE2
2013.04.10 22:12
멀티도메인, 사용합니다. 그래서 말인데,
이걸 이렇게 적용할 거면.. 가상 사이트 지원을 제대로 하면서 해야 합니다.
-
푸시아
2013.04.10 22:20
$obj->타이틀 = '';
$obj->컨텐츠 = '';
$obj->닉네임 = '';
$oDocument = &getController('document');
$output = $oDocument->insertDocument($obj,true);
대충 이런 느낌이면 멀티도메인도 되지 않을까요? 잘은 모르겠습니다.
-
라르게덴
2013.04.10 22:29
@푸시아 님께..
의견 고맙습니다.
번호를 붙여 푸시아님께 추가적으로 토의를 한 이유는,
XE가 구조적으로 유연성을 갖고 있어야하는 필요성은 소수 개발자가 쉽게 개발을 하기위함이 아니라 코어를 수정하지 않고도 코어가 가지고 있는 기본적인 기능을 컨트롤 할 수 있어야하기 때문입니다. 그래야 개발을 못하는 이용자들이 쉽게 옵션 선택으로 아무런 장애물없이 이용 가능할테니까요.
푸시아님의 의견은 제 개인적으로 느끼기에 상당히 개발자 입장이 강해보입니다. 코어 구조를 변경하거나 문제를 해결하기 위하는 목적은 일반 이용자를 염두하고 고려되어야지 된다고 생각합니다.
여담입니다만, 구조적으로 $manual_inserted 추가는 소스를 바라볼때 기본 게시판 모듈(board)이 익명기능 활용시 CSRF를 패스되도록 유도하고 있습니다. 이는 XE코어개발팀이 익명은 개인정보영역이 아니라고 판단했기 때문이 아닌가 생각됩니다.
CSRF가 무엇인지 아래에 간략히 설명되어있네요.
http://cafe.naver.com/buldon/6052
로그인이 되어야하고 접근 제약이 있었네요. 아래로 대체합니다.http://nobless_05.blog.me/50106924296
위 사항을 봤을때 외부개발을 용이하게 하기 위함이라기보단 코어 내부적으로 좀더 구체적으로 의미를 나눈게 아닌가 생각됩니다.
개선안을 살짝 이야기하자면 멀티도메인 값을 관리자 정보에 모두 담아두고 CSRF는 N:1로 일치여부를 판단하도록 개선되어야한다고 생각합니다. 이것을 별도 모듈, 애드온을 통해 한다면 코어는 좀 더 CSRF 부분을 유연하게 해둘필요가 있지 않나 생각합니다.
-
푸시아
2013.04.10 23:03
음, 가만 생각해 보니 말씀하신대로 XE는 멀티도메인 유저를 기본적으로는 고려하지 않은 설계군요.
그런데 checkCSRF가 갑자기 생긴 이유가 스팸툴에 의한 게시물작성 방지 때문 같습니다.
일반 사람들이 board 모듈을 사용할때 멀티도메인을 사용하려고 한다면 아마도...
board 모듈의 board.controller.php 파일의 77번줄의
$output = $oDocumentController->updateDocument($oDocument, $obj);
부분을
$output = $oDocumentController->updateDocument($oDocument, $obj, true);
로 true를 추가하고
82번줄의
$output = $oDocumentController->insertDocument($obj, $bAnonymous);
부분을
$output = $oDocumentController->insertDocument($obj, true);
로 교체하면 되지 않을까 생각됩니다.
테스트는 해보지 않았습니다.
안될수도 있습니다.
-
백성찬
2013.04.11 00:28
http://www.bek.me/index.php?mid=hpsfree
http://www.happyscience.org/index.php?mid=hpsfree
둘 다 작동하는 것 같습니다.
xe 1.7.3.1 -
라르게덴
2013.04.11 01:04
@백성찬님
멀티도메인으로 글 등록도 동작되시는것 같은데요.
위 푸시아님이랑 이야기했던 부분이 백성찬님은 어떻게 되어계신가요?
(board 모듈은 버전이 몇인지?)
관리자페이지 - 설정 - 기본 URL에는 어떤 값이 들어가 있나요?
그리고 제가 XE공홈에 등록된 공식 코어, 모듈만으로 설치하여 기본 URL을 공란으로 둔 상태로는 글 등록이 되질 않았습니다. 이에 대해서 이슈를 올렸고 개발진께서 불가하다는 이야기를 했고요.(글에 링크되어있습니다.)
마지막으로 백성찬님께서는 하나의 mid에 대해서 멀티도메인 적용이 되어야 한다고 생각하시나요?
-
백성찬
2013.04.11 01:08
게시판 1.7.1
기본 url 공란 입니다.
멀티도메인은 예전에도 그렇게 사용해왔고 그대로 진행중에 이슈가 떠서 다시 확인만 해본 것입니다. -
백성찬
2013.04.11 01:23
멀티도메인은 가능해야 합니다.
본점이 있고 분점이 있을 경우 포인트 등은 여러 분점에서 사용가능해야 합니다.
실제 제가 조언 하는 사이트는 분점 사이트가 많이 있습니다.
일반인은 전혀 다른 사이트 처럼 보입니다. 그러나 메인 사이트나 추가한 사이트나 이용하는데 아무 지장이 없습니다.
막으면 대안을 제시해야지 무조건 꽁꽁 막는다고 능사가 아닙니다. 막는 것은 언제인가는 뚤립니다. 그것이 '모순'이라는 것이지요.
제 사이트는 공격할 가치가 없을 수 있기에 문제가 있지 않을 수 있으나 기본 url이 없다고 해서 아직 까지 별다른 사건은 없었습니다.
도메인을 지정한 것 외에 막으려면 관리자가 다중 도메인 등록을 가능하게 하고 등록한 여러 도메인은 접근이 가능해야 해결책이 된다고 봅니다. -
sipjaga99
2013.06.23 04:48
안녕하세요...저도 두 도메인이 한 사이트를 접속하도록 하고 싶어서, 서치를 하고있습니다.백성찬님께서 올리신 내용처럼 할려면, 어떻게 할수 있나요?감사드립니다. -
라르게덴
2013.04.18 20:24
멀티 도메인 적용이 불가함에 따라서 이를 기능적으로 허용하기 위해 모듈을 만들어봤습니다. 예전에 하늘03 님께서 제작하신 virtual host 모듈과 기능은 다르지 않은데 1.7 대응과 checkCSRF를 정상적으로 수행시키도록 별도로 제작해봤습니다.
http://www.xpressengine.com/index.php?mid=download&package_srl=21876980
-
니는뜬데이~
2013.04.19 03:57
먼저 라르게텐 님의 노고에 진심으로 감사드립니다.
제작하신 에드온과 모듈을 정상 설치하였습니다. => 제 경우 설치. 과정이나 기타 사항에는 문제가 없습니다.
(코어 ver 1.7.3.1 / 게시판 ver 1.7.1 (스킨/스케치북5입니다.)
특별한 설정은 없는것 같은데 제 경우는 아직도 글쓰기는 안되는것 같습니다.
도메인별 접속과 표시 모두 정상입니다.
P.S : 관리자 페이지 기본 도메인은 공란입니다.
-
라르게덴
2013.04.19 08:25
쪽지로 제가 접속가능한 URL등 적어주시면 확인해볼게요. -
니는뜬데이~
2013.04.19 15:27
라르게덴 님 관심있는 답변 감사드립니다.
지인분께서 CSRF 관련하여 코어쪽을 만지면서 다른 부분과의 충돌이 있는듯하여 확인 요청중입니다.
document 모듈의 controller 를 보면 insertDocument 함수에 CSRF 방어 코드가 있습니다.
1.5의 경우 외부파일로 insertDocument를 사용할 수 없도록 되어 있습니다.
그런데 1.7부터는 manual 입력값에 true를 주면 CSRF 무시 가능하도록 코드가 수정되어 있습니다.
따라서 구조적으로 자체제작 모듈에서 document 입력이 가능해 졌다고 생각합니다.