■ 백엔드 ■/PHP2018.11.22 22:15


   PDO SQL 인젝션을 막기위한 처리


PDO가 해주는 중요한 역할 중 하나는 SQL 인젝션 공격을 걱정하지 않고도


외부 입력(사용자ID등) 값을 SQL 쿼리에 넣을 수 있게 해주는 것이다.


이는 PDO statements와 바운드 매개변수를 통해 가능하다.



   SQL 인젝션 예)

<?php
$pdo = new PDO('sqlite:/path/db/users.db');
$pdo->query("SELECT name FROM users WHERE id = " . $_GET['id']); // <-- NO!


http://domain.com/?id=1%3BDELETE+FROM+users


$_GET['id']는 1;DELETE FROM users



  바인딩을 사용하여 안전하게 값 전달하기


다음과 같이 PDO의 인자 바인딩을 사용해서 ID 입력값을 안전하게 전달해야 합니다.

<?php
$pdo = new PDO('sqlite:/path/db/users.db');
$stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT); // <-- 먼저 데이터를 필터링 ([데이터 필터링](#data_filtering) 참고), INSERT, UPDATE 등에 특히 중요.
$stmt->bindParam(':id', $id, PDO::PARAM_INT); // <-- PDO가 자동으로 SQL에서 위험한 요소 제거
$stmt->execute();


출처 : https://modernpug.github.io/php-the-right-way/#mysql_extension



Posted by SAP (Study And Programming) by serpiko

댓글을 달아 주세요