• Защищает ли PDO от SQL-инъекции?

    @ruslite
    Когда данные обработаны в PDO, они напрямую передаются драйверу базы данных, либо запрос строиться безопасным образом внутри данного расширения. Как можно заметить, это простой путь решения проблемы с SQL инъекциями.
    Однако при использовании предопределенных выражений совместно с PDO необходимо знать некоторые нюансы, чтобы избежать неприятных ситуаций. Например, в MySQL клиенте некоторые запросы, составленные посредством предопределенных выражений, не могут быть выполнены, а так же они не используют кэш, что может замедлить работу вашего web-приложения.
    Гарантированная безопасность при использовании предопределенных выражений звучит успокаивающе, но разработчики не должны принимать PDO и другие слои абстракции\предопределенные выражения за абсолютную защиту от взлома. Любые входящие данные должны проверяться, PDO – дополнительная линия обороны. Это расширение не закрывает все множество уязвимостей, посредством которых может быть нанесен вред вашей информации, но в то же время, PDO неплохо справляется с вопросом предотвращения SQL инъекций.

    Источник
    Ответ написан
    1 комментарий
  • Защищает ли PDO от SQL-инъекции?

    svd71
    @svd71
    Защищенность PDO от инъекций строится на использованании не динамически создаваемых запросов, но запросов с параметрами. Любой момент изменения запроса в коде под какие-то (часто необдуманные) нужды приводит к возможности инъекции.

    пример вам уже привели, повторю его:
    $qry = 'select * from users where user_id='".$usrname.'" and passwd='".md5($passwd.'$salt).'"';


    запрос подвержет инъекции: достаточно подсунуть имя с двойной кавычкой и далее через точкузапятую свой запрос. Остаток с паролем комментируется символами:

    $usrname = '"; update users set passwd="12345" where id="admin"; -- ';

    приведет фактически к такому запросу
    select * from users where id=""; update users set passwd="12345" where id="admin"; -- passwd=''


    совсем другое дело PDO. Он не допускает мультикомандные запросу как факт (то есть после первого select обработка не пойдет). А во вторых указанные инъекции просто запицется в параметры запроса, что будет обработанно корректно.
    Ответ написан
    1 комментарий
  • Защищает ли PDO от SQL-инъекции?

    metamorph
    @metamorph
    С помощью querybuilder можно построить запрос, подверженый инъекциям.
    К примеру, ->where('id=' . $id).

    А как Вам такая техника взлома БД: закачать и выполнить на сервере php-файл?

    Короче, недостаточно данных для ответа :)
    Ответ написан
    2 комментария
  • Защищает ли PDO от SQL-инъекции?

    charon
    @charon
    не полностью. Если, допустим, имена таблиц берутся из введённых пользователем данных, то там нельзя использовать подстановки. В этом случае вариантом решения может быть проверка пользовательского ввода на вхождение в допустимое множество (у вас же не бесконечное количество таблиц?)
    Ответ написан
    Комментировать