Extra Form
PHP PHP 7.4
CMS Rhymix 2.0

글 등록 함수 : https://github.com/rhymix/rhymix/blob/90d3766e5c6125b263eccc1ecd25a8dea7e1039e/modules/document/document.controller.php#L562-L567

 

글 수정 함수

 : https://github.com/rhymix/rhymix/blob/90d3766e5c6125b263eccc1ecd25a8dea7e1039e/modules/document/document.controller.php#L867-L872

 

위의 두 곳을 보면

// can modify regdate only manager
$grant = Context::get('grant');
if(!$grant->manager)
{
    unset($obj->regdate);
}

게시판 관리자만 등록일을 조작할 수 있다고 되어 있는데요.

 

일반회원이나 비회원이 여기에 접근하지 못하게 막은 특별한 이유가 있는 걸까요?

  • profile

    일반 회원들이 자신의 글 등록 시간을 임의로 조작할 수 있다면 곤란하겠죠.

    그런데 그 조작을 방지하는 코드가 잘못된 곳에 들어가 있어요.

    게시판 모듈(board.controller.php)에서 사용자 입력값과 권한을 충분히 검증한 후 문서 모듈(document.controller.php)에 넘겨주고, 문서 모듈에서는 받은 내용 그대로 DB에 저장하도록 만들어야 다양한 모듈에서 문서를 유연하게 활용할 수 있을 텐데... XE는 초창기에 너무 게시판 위주로 설계되어서 게시판이 해야 할 일을 문서 모듈에 떠넘기거나, 일반적인 게시판에서 필요없다고 생각되는 기능은 문서 모듈에서도 빠뜨린 사례가 많습니다. (덕분에 게시판 모듈이 아주 가벼워지긴 했죠. 한때 코어에서 분리하기도 했을 만큼...)

    그렇다고 이제 와서 저 코드를 게시판 모듈로 옮기게 되면, 게시판은 정상 작동하겠지만 문서 모듈을 활용하는 다른 자료에서 regdate를 조작하는 보안취약점이 발생할 수 있기 때문에 곤란해요. 현재로서는 서드파티 자료에서 regdate를 업데이트하는 쿼리를 별도로 만들어 쓰는 방법밖에 없습니다.

  • profile profile
    before 트리거로 편하게 입력값만 대체해주려 했는데, 다시 쿼리를 짜야겠군요ㅠㅠ
    자세한 설명 감사합니다!
  • profile profile
    네, 작성일과 status 등 몇몇 컬럼만 업데이트한다면 updateDocument를 쓰는 것보다 별도로 쿼리 돌리고 캐시만 비워 주시는 편이 훨씬 가벼울 거예요.