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