Безопасная работа с MySQL.
Сегодня, каждый второй сайт для хранения данных, которые отображаются на его страницах, использует базы данных MySQL, т.к это один из самых удобных способов хранения данных. Например, фан сайт актера Брэд Питта работает на основе MySQL. К сожалению, большая часть веб-сайтов подвержены взлому, т.к. были написаны без учета требований безопасности работы с БД MySQL.
Как мы знаем, абсолютной защиты не существует, и все, что написал человек можно взломать, но грамотно написанный код уменьшит риск несанкционированного доступа к веб-сайту.
Выводом данных на веб-страницы управляет человек. Например, в форму поиска человек вписывает нужные ему данные, нажимает на кнопку, и введенные данные передаются скрипту-обработчику, который взаимодействует с MySQL. Как, например, на неофициальном сайте актрисы Анджелины Джоли – www.joliestar.ru. При недостаточной обработке входящих данных, запрос SQL может изменяться, и соответственно выдавать другой результат.
SQL инъекция
SQL инъекция, это способ взлома сайтов, путем изменения или внедрения SQL кода. Такая уязвимость может дать злоумышленнику возможность выполнить нужный SQL код и получить нужные ему данные. SQL инъекция возникает из-за недостаточной обработки поступающих в скрипт данных.
Итак, рассмотрим пример SQL инъекции.
SQL код:
SELECT * FROM `table` WHERE `id` = $_GET[‘id’]
Данный SQL запрос осуществляет поиск записи в таблице table, id которой равен $_GET[‘id’]. Как нам известно, массив $_GET содержит данные, которые поступили в скрипт методом GET (параметры передаются в адресной строке, например: ?id=3). Если изменить значение параметра ID с ‘3’ на ‘3-1’ скрипт выдаст запись, id которой равен 2, т.е в SQL запросе просто выполняется математическое выражение (3 – 1 = 2).
Чтобы не допустить данную ошибку, необходимо проверить пришедшие от пользователя данные, и если имеются запрещенные символы (- + * ‘ ` / %), заменить их.
Ниже приведено несколько советов, которые помогут вам писать безопасные веб-сайты:
1. Не работайте с MySQL под именем одного пользователя. Создайте несколько пользователей с разными правами (удаление таблицы, изменение и добавление таблицы).
2. Проверяйте входящие данные на тип пользуясь функциями is_numeric (если цифровое значение) и is_string (если строковое значение). При необходимости преобразуйте данные в другой тип.
3. Передаваемые в SQL запрос строковые значения предварительно нужно обработать функцией mysql_real_escape_string.
Надеюсь, данная статья поможет вам в освоении основ безопасности работы с бд MySQL и вообще с БД. Безопасных вам веб-сайтов!


