최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰


   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



'■ 백엔드 ■ > PHP' 카테고리의 다른 글

기 로그인된 세션 삭제  (0) 2019.02.19
ajax 413 Request Entity Too Large error  (0) 2018.12.07
PDO Tutorial for MySQL Developers  (0) 2018.11.22
PhpSpreadsheet  (2) 2018.07.26
PHP5 PASSWORD HASH GENERATOR  (0) 2018.07.26
댓글