프로그램/php2015. 5. 28. 14:50

PHP PDO(PHP 5.1.0부터 제공)를 사용하게 되면 같은 코드로 여러 종류(예>MySQL, SQLite, 기타 등등)의 데이터베이스(DateBase) 연결에 사용할 수 있게 된다.

그리고 무엇보다도 SQL 인젝션(SQLInject) 공격을 걱정하지 않아도 된다.

중요> PHP 5.5 부터는 mysql_connect(), mysql_query() 등과 같은 mysql_ 로 시작하는 함수는 사용할 수 없게 되므로 PDO 또는 MYSQLi를 사용하도록 미리 준비하는 것을 권장한다.

 

 

[PDO-MySQL 모듈 설치 소스 하기]

PDD-Mysql 모듈은 기본 제공으로 PHP 설치 소스 경로로 이동한 후 진행한다.

(없으면 다운 받는다.)

참고>PDO-Mysql 모듈 다운받기

]# wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz

]# tar xvzf PDO_MYSQL-1.0.2.tgz

]# cd PDO_MYSQL-1.0.2

 

 

[PDO 설치 학인]

phpinfo()를 통해서 확인할 수 있다.  

... 생략 ...

 

또는

]# /usr/local/php/bin/php -i | grep PDO

 

 

 

 

 

[PDO-Mysql 모듈 추가 설치] : PHP 설치 Configure 옵션에 추가되지 않는다.

php 설치 소스로 이동한다.

]# cd /usr/local/src/apm/

]# ll

 

 

 

 

 

 

만일을 대비해 백업을 해둔다.

]# mkdir php-5.4.2_bk

]# cp -r php-5.4.2/* php-5.4.2_bk/

PDO-Mysql 모듈이 있는 위치로 이동한다.

]# cd php-5.4.2/ext/pdo_mysql/

]# ll

 

 

 

 

 

phpize명령어를 사용해서 확장모듈(여기서는 PDO-Mysql)을 위한 빌드 환경을 만든다.

]# /usr/local/php/bin/phpize

Configuring for:

PHP Api Version:  20100412

Zend Module Api No:  20100525

Zend Extension Api No:  22100525

참고>phpize 실행파일이 해당위치에 없다면 find / -name phpize를 실행해서 찾는다.

 

 

 

 

참고>phpize를 실행하면 configure 파일 및 기타 파일들이 생성된다.

- Cannot find autoconf 오류 발생시

 

 

컴파일을 한다.

]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql

]# make

]# make install

 

 

 

 

모듈 생성 확인

컴파일이 완료되면 /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 와 비슷한 경로를 찾은 후 pdo_mysql.so 파일이 생성되었는지 확인한다.

참고> 기존에 다른 확장 모듈을 추가했다면 다른 모듈 파일도 같은 경로에 있는 것을 확인할 수 있다.

 

 

 

 

PDO-Mysql 모듈 연동

php.ini 파일을 아래와 같이 수정한다.

]# vi /usr/local/apache/conf/php.ini

extension_dir = /usr/local/php/lib/php/extensions/no-debug-zts-20100525” <- 변경

extension=pdo_mysql.so <- 추가

apache를 재 시작한다.

]# service httpd restart

phpinfo()를 이용해서 PDO-Mysql활성화되었는지 확인한다.

]# /usr/local/php/bin/php -i | grep PDO

 

 


 

더보기>

- php pdo db 연결 / pdo db connection / pdo database 접속 / pdo db open

- php pdo limit 사용법 / pdo query limit offset / pdo mysql limit / pdo bindValue

- php pdo like 사용법 / pdo query like / pdo mysql like / pdo bindValue

Posted by 은둔고수
프로그램/php2013. 1. 30. 10:31

SQL Injection 해킹에 대한 보안 방지를 위한 php 정규식이다.

// 확인 : PHP SQL Injection 보안
// 설명 : 특수문자를 체크해서 있다면 false 반환, 없으면 true
function rtnSpecialCharCheck($str)
{
 if(preg_match("/[#\&\\+\-%@=\/\\\:;,\.\'\"\^`~\_|\!\/\?\*$#<>()\[\]\{\}]/i", $str,  $match))
 {
  return false;
 }

 return true;
}

 

// 이름

$name = '홍길동';
if(!rtnSpecialCharCheck($name))
{
 echo "<script>alert ('잘못된 정보입니다.');</script>";
 exit;
}

 

// 주민등록번호

$jumin = '9101011234564';

if(!rtnSpecialCharCheck($jumin))
{
 echo "<script>alert ('잘못된 정보입니다.');</script>";
 exit;
}

 

위 소스 내용을 토대로 다른 특수문자와 관련한 정규 표현식을 이용해서 응용할 수 있다. <- 클릭

 

php.ini 파일 설정 magic_quotes_gpc = On을 이용하는 방법 <- 클릭

Posted by 은둔고수
프로그램/php2012. 2. 27. 15:39


php를 설치한 후 php.ini 파일을 열어보고 magic_quotes_gpc 설정이 On으로 되어있다면
sql 인젝션 공격에 대한 대비가 어느정도 되어있다고 할 수 있다.

 

[php.ini] 소스 내용 중 magic_quotes_gpc 부분

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On


하지만 이 설정을 사용하지 않는다면 php에서 sql injection 공격을 방지할 수 있는 처리를 해야 한다.


// sql injection 처리
function chk_sqlinjection()
{
 if(!get_magic_quotes_gpc())
 {
  foreach($_POST as $k => $v)
  {
    $_POST[$k] = addslashes($v);
  }

  foreach($_GET as $k => $v)
  {
    $_GET[$k] = addslashes($v);
  }

  foreach($_SERVER as $k => $v)
  {
    $_SERVER[$k] = addslashes($v);
  }

  foreach($_COOKIE as $k => $v)
  {
    $_COOKIE[$k] = addslashes($v);
  }
 }
}

 

참고>

php 5.3 부터는 배제가 되며 php 6.0 이후부터는 magic_quotes_gpc가 아예 제거된다고 한다.

Posted by 은둔고수