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

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

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

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

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

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

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

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