Как правильно экранировать данные?

Доброе утро, сообщество! А как вы экранируете данные, которые от пользователя идут в базу? Я честно до последнего момента был уверен что PDO prepare() делает всю работу по экранированию, и засунуть в нее инъекцию не реально. Но один мой товарищ тихо мирно обычной инъекцией очистил мне табличку в базе, доказав что prepare() нифига не экранирует.
Есть масса способов, таких как addslashes, но было бы интересно послушать от вас. Вдруг все уже за меня придумано…
Николай
Николай
07 апреля 2015, 06:59
modx.pro
3 139

Комментарии: 5

Сергей Шлоков
07 апреля 2015, 11:21
Вдруг все уже за меня придумано…
На хабре есть подробные статьи.
В MODX есть
— modx::escape(),
— modx::quote(),
— modx::stripTags,
— ну и напоследок убойный modx::sanitizeString.
А ежели сам пишешь PDO запрос, то используй bindParam.
    Dmitry Rodionov
    19 мая 2015, 14:31
    а можно пример запроса с инъекцией?
      Василий Наумкин
      19 мая 2015, 14:58
      Мне, почему-то, кажется, что автор неверно использовал PDO::prepare() без плейсхолдеров, а просто вручную составлял запрос, который потом засунул в эту функцию. Так, конечно, ничего не будет экранировано.

      Вот правильный способ. Обратите внимание на
      $this->xpdo->prepare($sql)->execute(array_values($record));
      Евгений
      02 августа 2020, 13:46
      Может не совсем к месту вопрос, но всё равно задам

      Есть вывод ресурсов
      [[pdoResources?
      	&parents=`[[++locations_plans]]`
              &tpl=`@INLINE <a href="[[+alias]]">[[+menutitle]]</a>`
              &tvPrefix=``
              &where=`{"city:=":"Санкт–Петербург","template:=":3}`
              &includeTVs=`city`
      ]]
      так вот где
      city:=":«Санкт–Петербург

      в Санкт-Петербург приходится использовать тире, если ставить там „-“ (минус)
      ничего не работает

      как научить where корректно обрабатывать знак минус?
      заэкранировать его както или что?
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        5