나의 IT

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

Mr. K 2012. 11. 18. 04:38

 

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 접근 암호를 보호할 수 있을것이라 예상된다.