포럼
펑....
2013.12.01 19:26
서브도메인이나 m 도메인 사용시에
checCSRF 에서 Referer과 기본 주소를 프로토콜 포함해서 풀로 검색할려고 하기때문에..
false 값이 돌아오는 것 같습니다.
그래서 글이나 댓글 작성할 때 올바르지 않은 요청 입니다 (?) 였나? 하는 경고나 나오더군요..
기본주소에서 프로토콜을 빼고.. 호스트명만 가지고 비교를 하고.. 또 strstr 로 Referer과 비교하던걸
패턴 매칭을 통해서 비교하면 어떨 까 싶습니다.
일단 제가 생각한 것은
function checkCSRF() { if($_SERVER['REQUEST_METHOD'] != 'POST') { return FALSE; } $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; } } else { $virtualSiteInfo = $oModuleModel->getSiteInfo($siteModuleInfo->site_srl); $virtualSiteUrl = parse_url($virtualSiteInfo->domain); if(strtolower($virtualSiteInfo->domain) != strtolower(Context::get('vid')) && !preg_match('/^([a-z]+\.)?'.$virtualSiteUrl['host'].'$/',$referer['host'])) { return FALSE; } } return TRUE; }
이런 식으로
$virtualSiteUrl = parse_url($virtualSiteInfo->domain);
도메인에서 호스트 부분만 빼 온 다음에
!preg_match('/^([a-z]+\.)?'.$virtualSiteUrl['host'].'$/',$referer['host'])
이렇게 패턴 매칭으로 서브도메인으로 접속해 있는 경우 걸리지 않게 해주는 것입니다.
물론 asdf.서브도메인.기본주소.asdf.kr 식이나 서브도메인.기본주소.asdf.kr 식으로 들어오면 false 가 되는 식으로요..
몇일 전부터 모바일 전용 주소를 사용하고 있었는데.. 모바일 주소로 접속하면 글쓰기와 댓글쓰기가 안된다고 하셔서....
뭐가 문제이지 하고 찾아봤더니 저기서 걸리더군요... (...)
일단 github 에도 이슈로 올려놓긴 했지만 여기서 공개 토론(?) 을 하면 더 좋은 방법이 나오지 않을까 해서 올려봅니다.
댓글 12
-
Canto
2013.12.01 19:34
-
도라미
2013.12.01 19:35
xe 기본 정책이 단일 도메인 아닌가요?확실하지 않으니 정정합니다.
-
Canto
2013.12.01 19:36
단일 도메인이 기본정책이였나요? 그러면 가상사이트라는 개념을 추가 시킬 필요가 없었을텐데요...?
-
Canto
2013.12.01 19:47
일단 저부분만 고치면 서브도메인으로 접속했을때 올바르지 않을 요청입니다?? 라면서 글쓰기와 댓글 쓰는게 불가능한 현상을 일단 피해지더라고요.
-
라르게덴
2013.12.01 20:36
멀티도메인 모듈로는 안되는건가요?
http://www.xpressengine.com/21854539
-
Canto
2013.12.01 20:49
사용 해봤는데 서브도메인에서 글작성시와 댓글 작성시에
if($siteModuleInfo->site_srl === 0)
{
if(!strstr(strtolower($defaultUrl), strtolower($referer['host'])))
{
return FALSE;
}
}
요기로 빠져서 FALSE 되더라고요..
-
라르게덴
2013.12.01 21:21
왜 === 죠?
사용하는 도메인 전부 멀티도메인에(서브도메인도) 설정해도 안되셨다는건가요?
-
Canto
2013.12.01 21:25
http://www.xpressengine.com/index.php?mid=tip&search_keyword=%EC%9E%98%EB%AA%BB%EB%90%9C+%EC%9A%94%EC%B2%AD&search_target=title&document_srl=21735389
제 사이트에서만 문제가 되는것인가는 잘모르겠는데 모바일에서 댓글과 글이 안써지더라고요...
-
라르게덴
2013.12.01 21:34
위 팁을 하지 말고 XE코어 기본에 멀티도메인 조합으로도 접근에 문제가 있다면 재현사이트랑 함께 저한테 쪽지주세요. 저는 해당 문제를 멀티도메인선에서 해결볼 수 있다고 생각합니다.
-
Canto
2013.12.01 21:26
이 방법은 보편적으로 적용할 수가 없겠네요..
서브도메인과 관련되서 생각해보니까.. 호스팅사 무료도메인 이용시 문제가 될 수 있다는 점을 BNU님께서 알려주셨습니다.
-
Canto
2013.12.01 22:09
이 이슈는 펑하겠습니다. @라르게덴님의 멀티도메인 조합으로 가능하네요.
제가 운영중인 사이트는 어디선가 꼬여서 그런가 보네요 ㅠ
기본 옵션으로 사용해봤을때 문제 없다는 것을 확인하였습니다. ㅠ
-
explode
2013.12.02 00:09
전 귀찮아서 저거 다 지우고 return TRUE;로 바꿨습니다.
지금 확인해 보니까
이렇게 숫자도 포함시켜줘야겠군요..