PHP에서 MVC 모델 형태로 웹 시스템을 개발하다보면 DB에 저장, 혹은 DB 정보를 수정하는 URL이 생성되는데 문제는 해당 URL을 막바로 웹브라우저 주소 창에 입력하게 될 경우 문제가 발생하게 된다.
DB에 insert하는 경우의 URL을 웹 브라우저에서 막바로 입력해서 막바로 접속할 경우 시스템을 정교하게 만들지 않을 경우 데이터가 없는 새로운 레코드가 생성되는 불상사가 발생하게 된다.

http://xxx.xxx.xxx/adm/reg/member 
  ⇒ 회원가입 페이지(reg_member.php)
    ⇒ http://xxx.xxx.xxx/adm/save/member
       ⇒ DB에 회원 정보 insert(AdmModel.php -> insertMember())

여기서 사용자가 웹 브라우저 주소창에  http://xxx.xxx.xxx/adm/save/member 이 URL로 막바로 접속할 경우 AdmModel.php의 insertMember() 함수가 실행되어 DB에 입력 값이 없는 회원 레코드가 하나 생성되는 불상사가 발생한다는 것이다.
따라서 이런 경우를 막기 위해서는 아래와 같이 간단한 몇줄의 코드로 방어할수 있다.

        public function registeMember($regMbr){
            $prevPage = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_PATH);

            if($prevPage != '/adm/reg/member'){
                echo "<script>alert('허용되지 않는 잘못된 접근입니다.');</script>";
                return;
            }
        }

HTTP_REFERER 환경 변수는 이전 페이지의 URL 값을 담고 있는 환경변수이다. 따라서 정상적인 경우라면 /adm/save/member URL로 들어오기 전 URL은 /adm/reg/member 이어야 하는 것이다. 이 값이 아닌경우라면 차단하면 되는 것이다.
즉 브라우저에서 회원 정보를 등록하는 URL인 http://xxx.xxx.xxx/adm/save/member로 막바로 접속시 위의 $prevPage에는 아무 값이 없다. 따라서 그런 경우는 차단을 하면된다.

+ Recent posts