포럼
checkCSRF 꼭 해야하나요? 이거 안하면 보안에 문제 생기나요?
2013.03.13 15:50
document 모듈의
document.controller.php 를 보면
insertDocument() 부분에
if(!checkCSRF())
{
return new Object(-1, 'msg_invalid_request');
}
가 있습니다.
코어 1.5.4.3 버전입니다.
이 함수는
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;
}
}
else
{
$virtualSiteInfo = $oModuleModel->getSiteInfo($siteModuleInfo->site_srl);
if(strtolower($virtualSiteInfo->domain) != strtolower(Context::get('vid')) && !strstr(strtolower($virtualSiteInfo->domain), strtolower($referer['host'])))
{
return false;
}
}
return true;
}
를 담고 있습니다.
이거 꼭 써야 하나요? 이거 안쓰면 문제 생길까요?
외부 모듈에서 글 등록이 안되는 경우가 있는데 글등록시 체크하는 부분을 주석처리해서 무시하면 등록되고
살려 놓으면 글 등록이 안됩니다 ㅠㅜ
댓글 6
-
BluesPia[꾸야]
2013.03.14 22:02
외부 프로그램에서 글등록시 리퍼러를 속여주시면 될것같은데요... -
푸시아
2013.03.14 22:51
오. 리퍼러 속이기라는 방법이 있는것이군요. 감사합니다. 한번 알아봐야겠어요. -
언벨리티
2013.03.17 21:36
하지만 하지 않을 경우 CSRF 취약점으로 공격받을 수도.. 양날의 검이지요.
-
푸시아
2013.03.22 03:43
1.7에서는 피해가는 방법을 넣어 주셨네요. xe 개발자님들께 감사드립니다.
-
푸시아
2013.03.22 03:52
그러고 보니 1.5도 이제 버전업이 끝났으니 document.controller.php 파일을 수정해도 되지 않을까 싶네요.
1.5 버전에서는 if(!checkCSRF()) 이부분을 if(!$manual_inserted && !checkCSRF()) 로 교체 합시다.
1.4 버전에서는 없는 코드이므로 무시하셔도 좋습니다.
-
criuce
2013.03.22 17:30
보통 스팸 글들이 csrf 공격을 이용해 다량 등록 되기 때문에 이왕이면 사용하시는게 좋습니다~