2014년 12월 29일 월요일

php 에서 mysql 사용시 sql injection 방지하는 코드


php 에서 mysql 사용시 sql injection 방지하는 코드
 

PDO 사용시
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute(array('name' => $name));

foreach ($stmt as $row) {
// do something with $row
}
 
핵심은  쿼리 안의 :name 이라는 글자가 나중에 $name 이라는 변수로 치환될 때 
자동으로 sql injection 을 막아주는 것. 
prepare statement 라고 한다.
 
 
MYSQLi 사용시
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt
->bind_param('s', $name);

$stmt
->execute();

$result
= $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// do something with $row
}

MYSQLi 를 사용할 때는 prepare statement 가 아니라 binding_param 이라는 것을 사용한다.

파라미터 이름 대신 ? 를 적고, ? 가 나중에 binding_param 에 의해서 sql injection 을 막아주면서 값으로 쿼리문 안에 들어간다.

 

참고 : How can I prevent SQL-injection in PHP?

댓글 없음:

댓글 쓰기