ГРУППА КУРСА
|
Главная >
Учебник MySQL >
Защита сайтаВзаимодействие скриптов с MySQL - одно из уязвимых мест сайта. Когда отправляется запрос к базе данных, злоумышленник может добавить свой код к этому запросу и навредить сайту. Такой код называется SQL-инъекция. Добавление SQL-инъекции возможно потому, что пользователи отправляют на сервер данные, которые в дальнейшем становятся частью SQL-запроса. Например, пользователь при авторизации вводит логин и этот логин записывается в SQL-запрос, чтобы проверить, есть ли в БД такой пользователь. Вместо данных, которые скрипт ожидает от пользователя, злоумышленник может написать SQL-код и этот код попадает в запрос. Защита от SQL инъекций - это один из основных аспектов безопасности сайта, использующего базы данных. Также можно навредить сайту, если добавить к отправляемым данным HTML теги. Это работает даже тогда когда эти данные не записываются в базу данных. Ведь информация, введённая пользователем, часто выводится на страницу. А добавленный HTML код заставляет работать страницу совсем не так, как предполагает владелец сайта. Еще одну ошибку может создать не только хакер, но и простой пользователь. Строковые данные в SQL-запросе пишутся в кавычках. Если пользователь отправил на сервер строку, которая тоже содержит кавычки, то синтаксис запроса нарушается и запрос будет не такой, какой должен быть. Для защиты от взлома нужно обрабатывать все данные, отправляемые пользователями. Для примера создадим скрипт, принимающий данные из формы: +
Когда мы ожидаем от пользователя число, то нужно просто привести принимаемые данные к нужному типу. Либо int, либо double, в зависимости от того, какой тип должен быть. Строка 3 должна выглядеть так:
При получении строк, данные нужно обрабатывать функцией htmlSpecialChars(), которая переводит спецсимволы HTML в коды этих символов. После такой обработки HTML код превращается в текст.
Обработку данных нужно производить на сервере. Всё, что делается на стороне клиента, можно изменить и отправить на сервер любые данные. Если пользователь не вводит текст сам, а выбирает из предложенных вариантов или нажимает кнопки, то не стоит полагать, что это позволяет защититься от взлома. Данные, отправленные таким способом могут содержать что угодно, и их тоже нужно обрабатывать. Для защиты от SQL-инъекций рекомендуется создать пользователя базы данных с минимальными привилегиями, достаточными для функционирования сайта. И в скриптах подключаться к MySQL с этим пользователем. Это даёт дополнительную уверенность в том, что никто не произведёт действий, которые вообще не предполагаются на сайте, например, удаление записей. Для создания SQL-инъекции нужно иметь представление о том, из каких таблиц и полей состоит база данных. Если злоумышленник не смог получить эту информацию, то он отправляет запросы наугад. Поэтому на реальных сайтах не нужно задавать таблицам и полям очевидные имена. Придумывайте более сложные названия, которые будет трудно подобрать. |