Делимся секретами создания сайтов

Как защититься от SQL инъекций???

Кто как защищаеться от SOL инъекций???

Ответы: 31 → “Как защититься от SQL инъекций???”

  1. Сергей Екимов Ответить

    PDO или DBSimple
    помимо защиты от инъекций упрощают жизнь

  2. Андрей Вольберг Ответить

    ну а по простому – приведение числовых типов и mysql_real_escape_string для строк.

  3. Илья Антипенко Ответить

    intval() )))

  4. Вадим Волшебник Ответить

    SQL-шпагой, каналья!

  5. Андрей Вольберг Ответить

    Тогда уже PHP-сковородкой, учитывая, что инъекция – это укол, обычно в жопу :) ))))

    Вместо intval советуют is_numeric
    Кажись дело в том, что типint иногда коротковат бывает для больших чисел типа timestamp.

  6. Плиско Вячеслав Ответить

    правильный вариант был дан в самом первом ответе, всё остальное – мусор.

  7. Бес Андрей Ответить

    Андрей, почему int коротковат? int вроде как идет для чисел от -2147483648 до 2147483648, куда текущий timestamp попадает 0)) лет через 30 да, надо будет уже на long переходить 0))))))))

  8. Плиско Вячеслав Ответить

    лонг не будет, будет 64 битный integer

  9. Андрей Вольберг Ответить

    Бес, да то я где-то ухватил, что мускульный BIGINT больше чем int пхпшный, из-за чего, предупреждали, могут быть коллизии, как при вводе чего-то большого (типа астрономических расстояний), так и при выводе.

  10. Иван Бюргановский Ответить

    оффтоп пошел.
    кслову есть у меня вопрос. mysql(i)_real_escape, тварь такая, требует привязки к линку (видать для корректной работы с текущим анкодингом, который у меня всегда ютф). А вот есть у кого независимая функция выполняющая тоже самое? желательно ссылочку на источник. в комментах к мане не нашел.
    буду очень благодарен.
    а по поводу интвал и прочего, непонятно зачем оно надо (в данном случае) когда есть опять же рилэскейп. хотя айди (как самый частый случай) я раньше безопасил интвалом иногда.

  11. Илья Антипенко Ответить

    у меня уже привычка, переданные числовые параметры типа id, tidи пр. пропускать через интвал…

  12. Плиско Вячеслав Ответить

    зачем реалескейп, если есть PDO с плейсхолдерами и prepare методом, что намного кошенрнее. пускай БД разбирается какие ей параметры нужны, накройняк биллиотека, но не разработчик.

  13. Иван Бюргановский Ответить

    А вот здесь не согласен. Меня конструкции типа "????????" -> "ssssiii", мягко говоря, разочаровыают своей корявостью, хоть и работают, как говорят, быстрее. А что если мне нужно динамически собирать запрос? Мне что постоянно контролировать порядок добавления очередной связки "?" – "s"и, как следствие, их количество? Уже сто лет назад нужно было им квери билдер сделать нормальный как в когане и прочих fw (это если мы php берем).
    Я – против плейсхолдеров. И на кошерность я гордо клал.

  14. Плиско Вячеслав Ответить

    какой нафик квери билдер, если как оказывается разработчики и так не знают функционала мускула :(

  15. Иван Бюргановский Ответить

    >разработчики и так не знают функционала мускула
    это я так понимаю мне?

  16. Giga Byte Ответить

    Фильтр всего и вся что передает юзер на сайт, сервер. Ну а передает он это не так уж многими способами
    $_GET
    $_POST
    $_COOKIES
    $_FILES
    Ну там еще могут быть некие экзотические варианты, но в условиях обычного сайта и тем более иньекции их не применяют
    А что и как вот фильтровать ваш выбор. Чаще иньекция это замена условий в запросе, или прицепливание к одному запросу другого, через UNION, так почему му бы нам этот юнион не кастрировать?
    $_GET=str_replace('UNION','ЮНИОН',$_GET);
    Ну и тот же mysql_real_escape_string и еще много стандартных функций фильтрации, замены спецсимволов. Я кроме прочего еще и * кастрирую превращая в уникод *
    Кроме прочего я бы рекомендовал для сайта, обычного пользователя mysql ограничить sql функции, оставив только необходимые. Напрем желательно убрать TRUNC?1?T?1?, DR?1?P, ALTER … Если эти функции вам нужны на уровне админа, то создайте отдельно пользователя с расширенными функциями и используйте его в админке или через phpmyadmin.

  17. Giga Byte Ответить

    Сори тут код покосячил контакт, вот кстати пример их защиты гы =)

  18. Плиско Вячеслав Ответить

    ага, как раз защита косячная, руки за такую отрывать нужно.
    prepare, execute и плэйсхолдеры конструкции mysql (и в других ДБ попадаются). что ещё надо, какие нафик инъекции. выбросите книги php и mysql за 24 часа.
    http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-pr...

  19. Плиско Вячеслав Ответить

    дико взбесило, ЧТО ЧЕЛОВЕК ДАЛ ПРЕКРАСНЫЙ ОТВЕТ в первом же посте, а дальше набежали советчики с вредными советами.

  20. Сергей Екимов Ответить

    Чаще иньекция это замена условий в запросе, или прицепливание к одному запросу другого, через UNION, так почему му бы нам этот юнион не кастрировать?
    $_GET=str_replace('UNION','ЮНИОН',$_GET);

    пестец)))))))))))))))))))

    "Ну и тот же mysql_real_escape_string и еще много стандартных функций фильтрации, замены спецсимволов."
    открою секрет: в том же DBSimple это так и реализовано. только подбные библиотеки содержат еще дополнительные вкусности + проверены временем.

    #19 полностью согласен. многие останавливаются на изучении книжек "изучи php,mysql за 24 часа" и начинают ебошить говно-сайты в стиле str_replace('UNION','ЮНИОН',$_GET)

    Советую всем новичкам почитать книжку "PHP рецепты программирования" (издательство ORELLY).

  21. Giga Byte Ответить

    Гавносайт в стиле юнион работает 2 года, в пике до 2 млн. хитов в сутки. До 500 запросов к БД в секунду. Максимум чего добивались ддос сервера. Чистенькие сайтики по учебникам я видел, в коде. Налепили ума, объем кода для равноценного функционала в несколько раз выше и затраты ресурса сервера. А толк один. :)

  22. Giga Byte Ответить

    Из книг ни одной книжки бумажной в руках не держал :-) Ну так уж получилось. Качал пару книг в электронном виде. Единственно кого признаю это Кузнецова и Семендяева, у них много книг, их студия softtime.ru. По книгам видно, что это все лично пережитое авторами а не взятое с потолка, от большого ума слепленное.. Все приятно читается и поймается, куча реальных примеров, задачек.

  23. Giga Byte Ответить

    Не удержался и посмотрел на DBSimple http://dklab.ru/lib/DbSimple/demo.zip
    Много там нужного и полезного, но еще больше абсолютно ненужного и бесполезного для работы обычного сайта.
    По защите от иньекций нашел только вот эту функцию
    function _performEscape($s, $isIdent=false)
    {
    if (!$isIdent) {
    return "'" . mysql_real_escape_string($s, $this->link) . "'";
    } else {
    return "`" . str_replace('`', '“', $s) . "`";
    }
    }

  24. Плиско Вячеслав Ответить

    блин, застрелись. там небось ещё и " заменяется КАВЫЧКА?
    а что ты такого особенного хотел увидеть в библиотечке? думаешь этого не достаточно?

  25. Giga Byte Ответить

    Нет не достаточно :-) На своей шкуре проверено. В отличии от некоторых …

  26. Плиско Вячеслав Ответить

    ну, расскажи, где это дало сбой? мне очень интересно. ;)

  27. Алексей Макаров Ответить

    Зачем использовать всякие библиотеки, если можно исп. всего две функции:
    intval()
    и
    mysql_real_escape()
    Вместо второй можно свою написать. Кода меньше будет, а значит работать быстрее будет.

  28. Александр Сердюк Ответить

    ояебу, что за сложности, создаете:
    .htaccess:
    Order Allow, Deny
    Allow from 127.0.0.1
    и не паритесь)))))

  29. Плиско Вячеслав Ответить

    зачем писать cms, cmf, если есть джумла?

    копаться в спагетти коде со вставками mysql_real_escape_string и помнить где параметр должен быть строкой, а где цифрой – пожалуйсто, мучайся сам, но дай другим пользоваться благами цивилизации.

    • Неуч. Иди лучше дворником работай.

  30. Alex Matskoff-Lion Ответить

    >>mysql_real_escape()
    Вместо второй можно свою написать. Кода меньше будет, а значит работать быстрее будет.

    Честно говоря сомневаюсь… Врядли ты обгонишь на пхп то, что писали девелоперы РНР на сях)) Очень сомневаюсь)))

Ответить