본문 바로가기

나의 IT

PHP 캡슐화를 이용해 mySql 비밀번호 보호하기

 

php를 이용하여 서비스를 만들때 가장 중요한건 DB의 비밀번호일 것이다.

이때 DB 비밀번호의 보안을 위해 php 객체지향 특성을 이용해 DB 비밀번호를 캡슐화 해보겠습니다.

 

ClassDB.inc  :DB에 관한 기초 정보를 가지고 있습니다.

<?

class ClassDB {
    private $dbid = "DB접속 아이디";       //변수들을 private을 설정하여 다른 클래스에서는 접근이 불가능하게 합니다.
    private $dbpw = "비밀번호";
    private $dbname = "DB이름";
    private $dbhost = "DB접속주소";

    protected function getID(){               //함수들을 만들어 외부에서 접근 불가능한 DB관련 변수값들을 리턴해줍니다.
        return $this->dbid;
    }
    protected function getPW(){
        return $this->dbpw;
     }
     protected function getName(){
        return $this->dbname;
     }
     protected function getHost(){
         return $this->dbhost;
     }
}

?>

이렇게만 해놓으면 혹시, 외부에서 이 파일의 주소를 알아 접근하면 고스란히 DB암호가 노출되게 된다.

ssh (or telnet)에 접속하여 해당 파일이 외부에서 접근 불가능하게 권한을 설정합니다.

chmod 600 ClassDB.inc   소유자를 제외한 모든 접근의 권한을 막습니다.

 

위 파일을 사용하는 방법은 DBclass를 상속받아 인스턴스 생성 후 사용하면 됩니다. 예는 아래와 같습니다.

<?
include("ClassDB.inc");       ClassDB.inc를 포합합니다.

                                                패키지 등을 이용 include를 사용 안하는 방법이 있으면 피드백 좀 주세요

class GetDB extends DBclass {    ClassDB를 상속받는 자녀 클래스 GetDB를 만듭니다.
      function getDBinfo(){
          echo ($this->getID());           ClassDB를 상속받았기 때문에 ClassDB에 있는 getID() 메소드에 접근 가능합니다.
          echo ($this->getHost());
       }
}

$getDB = new GetDB;                    GetDB 클래스를 실제로 사용하기 위해 생성자를 이용 인스턴스 생성;
$getDB->getDBinfo();                     인스턴스를 이용하여 함수호출


?>

 

이렇게만해도 실제로 서버가 해킹당해 해당 파일을 도난 당하지 않는다면 DB 접근 암호를 보호할 수 있을것이라 예상된다.