PHP SQL Injection 공격 방지 방법



PHP 에서 mysql injection 공격을 방지하는 방법입니다.


id 는 가급적이면 알파벳과 숫자만 허용하고 특수문자(따옴표나 주석으로 사용되는 #문자 등)를 사용하지 못하게 하는게 좋습니다.


특수문자로 된 인젝션이라면 php.ini 옵션에 magic_quotes_gpc 가 on 이라면 방지가 됩니다.


하지만 PHP 5.4 버전 부터는 저 옵션이 제외가 됩니다.


이럴때는 아래 처럼 코딩하는게 좋습니다.



▶ addslashes 함수 사용


if(!get_magic_quotes_gpc()) { // PHP 5.4 ~

$id = addslashes($_POST['id']);

$pw = addslashes($_POST['pw']);

}

else {

$id = $_POST['id'];

$pw = $_POST['pw'];

}



▶ 정규식으로 알파벳과 숫자 이외의 문자 체크


if(preg_match('/[^A-Za-z0-9]/', $id)) {

return false;

}



▶ 역슬래쉬 문자 체크


if(strlen($pw) != strlen(str_replace("\\","",$pw))) {

return false;

}



▶ 공백 문자 체크


if(strpos($pw, " ") !== false) {

return false;

}



▶ SQL Injection 예


id => ' or 1=1#

pw => 1234


SELECT * FROM member WHERE id = '' or 1=1#' and pw = '1234'


위의 경우는 공백문자만 체크해도 방지가 가능합니다.


블로그 이미지

iVPS 영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

댓글을 달아 주세요