Подтвердить что ты не робот

Как очистить ввод с помощью PDO?

Нужно ли использовать mysql_real_escape_string() на моем входе (например, $_POST и $_GET), когда я использую PDO библиотека?

Как правильно избежать ввода пользователя с помощью PDO?

4b9b3361

Ответ 1

Если вы используете PDO, вы можете параметризовать свои запросы, устраняя необходимость избегать любых включенных переменных.

Смотрите здесь для отличного вводного учебника для PDO.

Используя PDO, вы можете разделить SQL и передать параметры с помощью подготовленных операторов, это избавит вас от необходимости избегать строк, поскольку, поскольку они выполняются отдельно, а затем объединены при выполнении, параметры автоматически обрабатываются как укусы из указанного выше источника:

   // where $dbh is your PDO connection

   $stmt = $dbh->prepare("SELECT * FROM animals WHERE animal_id = :animal_id AND animal_name = :animal_name");

   /*** bind the paramaters ***/
   $stmt->bindParam(':animal_id', $animal_id, PDO::PARAM_INT);
   $stmt->bindParam(':animal_name', $animal_name, PDO::PARAM_STR, 5);

   /*** execute the prepared statement ***/
   $stmt->execute();

Примечание: санификация происходит во время привязки переменных ($stmt->bindParam)

Другие ресурсы:

http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

http://www.phpeveryday.com/articles/PDO-Prepared-Statement-P550.html

http://php.net/manual/en/pdo.prepared-statements.php

Ответ 2

Важным моментом при использовании PDO является:

PDO будет дезинфицировать его только для SQL, а не для вашего приложения.

Итак, для записей, таких как INSERT или UPDATE, особенно важно, чтобы все еще сначала фильтровать ваши данные и дезинформировать их для других вещей (удаление HTML-тегов, JavaScript и т.д.).

<?php
$pdo = new PDO(...);
$stmt = $pdo->prepare('UPDATE users SET name = :name WHERE id = :id');
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT); // <-- filter your data first
$name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING); // <-- filter your data first
$stmt->bindParam(':id', $id, PDO::PARAM_INT); // <-- Automatically sanitized for SQL by PDO
$stmt->bindParam(':name', $name, PDO::PARAM_STR); // <-- Automatically sanitized for SQL by PDO
$stmt->execute();

Без дезинфекции пользовательского ввода, хакер мог бы сохранить некоторый javascript в вашей базе данных, а затем, выведя его на свой сайт, вы подверглись бы угрозе!

http://www.phptherightway.com/#pdo_extension