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?
댓글 없음:
댓글 쓰기