Форум Академгородка, Новосибирск > SQL-инъекции и защита от них.
Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SQL-инъекции и защита от них.
Форум Академгородка, Новосибирск > Компьютеры и сети > Программирование > WEB-программирование
Astronom
Изучаю тему SQL запросов в php.
Ради интереса решил попробовать потестить распространенные SQL-инъекции на местных и неместных сайтах и был удивлен количеством дыр, в которые их можно применить.

Например, вот такой сайт http://www.abfitness.ru на запрос в поиске search%' AND LIKE '%search выдал свои внутренности с потрахами.
http://www.santesport.ru/catalog/?node=248 - аналогично
http://www.ivolga.ru - аналогично.

Вот такие ошибку не выдали, но сдохли также мгновенно - http://meblior.ru/
http://vip-odor.ru
http://www.bartersib.ru
http://avega.rosbizinfo.ru

На деле 7-10% новосибирских сайтов, снабженных поиском, подвержены таким инъекциям.

Сабж. Какими способами кроме mysql_real_escape_string() вы защищаетесь от инъекций?
mishgun
вам одного способа мало?
пользуйтесь addslashes
milfoil
placeholders
JenEk
Вот тут все хорошо описано что где ставить и как http://www.phpfaq.ru/slashes

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

В этом случае необходимо писать еще методы (функции), которые необходимо применят на тех данных, которые пришли из вне. Если программист пропустит проверку, скрипт сам скажет об этом и выдаст на экран ошибку, что переменная не была проверена на данные, которые ожидал программист. Причем методы должны быть, которые только проверяют на тип данные и методы которые проверяют и приводят данные к нужному типу. Но это все муторно и для маленьких проектов совсем не нужно.

Можно просто использовать какой-нибудь класс для работы с БД, например DbSimple и все запросы делать через шаблоны, ошибиться будет сложно.

Но и это не главное, взломать можно всё, главное делать хотя бы раз в день дамп базы и самого сайта. Ну и хранить хотя бы их за последние семь дней.

Так работают мои сайты, называется взламывайте товарищи сколько угодно, сайт на утро будет работать и от силы данные потеряются за пару дней. При этом ни разу этого не смогли сделать, хотя уверен, что мог где-нибудь что-нибудь пропустить.

Tonal
Цитата(Astronom @ 14.05.2011, 20:28) *
Сабж. Какими способами кроме mysql_real_escape_string() вы защищаетесь от инъекций?

Используй модуль mysqli или PDO вместо mysql.
В обоих есть механизм параметризованных запросов.
Что позволяет разделить текст запроса от данных на уровне сервера. Т. е. избежать динамического составления запросов. smile.gif
hp2501
Полученные данные из COOKIE, POST и GET (все данные которые может редактировать пользователь) стоит обрабатывать с помощью функции addslashes(); или mysql_real_escape_string(); - для этой функции нужно подключение к базе.
Daniel
в типизированном языке запросов к базе (например LINQ) такой проблемы практически не возникает
максимум, что можно сделать - это инъекция javascript. против javascript-инъекции есть фильтры, которые не пропускают POST-запросы с тэгами.
Primitive
Юзайте ORMки и не мучайтесь ) пропел, доктрина )
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2024 IPS, Inc.