Срок работы пробной версии продукта истек. Через две недели этот сайт полностью прекратит свою работу. Вы можете купить полнофункциональную версию продукта на сайте www.1c-bitrix.ru. Как защититься от SQL injection?

Как защититься от SQL injection?

SQL injection одна из самых распространенных уязвимостей. Давайте представим, что пользователь в поле вносит следующие данные:

value'); DROP TABLE table;--

Эти данные передаются в следующий php скрипт:

$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");

Что мы получим на выходе? А на выходе будет неприятная ситуация с удалением таблицы, вот какой SQL запрос выполнится:

INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')

Напомню, что -- в SQL означает комментарий, т.е. этот код закрыл запрос по вставке данных в таблицу, потом передал запрос на удаление таблицы, а все остальные SQL инструкции идут как комментарий. Мы собрали ряд способов как избежать этой уязвимости:

  1. Обработка входных данных функцией mysql_real_escape_string (важно отметить, что данная функция и расширение MySQL с версии PHP 5.5.0 считаются устаревшими, следует использовать расширение MySQLi).
  2. Если используется расширение PDO (PHP Object Data), то необходимо воспользоваться функциями prepare - для подготовки запроса в базу данных и execute - для передачи входных параметров и выполнение запроса. Пример:
    $stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
    $stmt->execute(array('name' => $name));
  3. Если используется расширение MySQLi, то для подготовки запроса используется функция prepare, для передачи входных параметров bind_param и для выполнения запроса execute. Пример:
    $stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
    $stmt->bind_param('s', $name);
    $stmt->execute();
    $result = $stmt->get_result();

Важно помнить, что необходимо обработать все входные данные, которые участвуют в SQL запросе.

 1074 PHP, SQL, Безопасность
12 февраля 2015
Команда BXCert

Наша команда разрабатывает портал BXCert, а также занимается разработкой сайтов на CMS 1С-Битрикс. Все участники являются сертифицированными специалистами Bitrix.

Комментарии

Чтобы оставлять комментарии необходимо зарегистрироваться и пройти авторизацию.