SQL взлом Защита сайта Статьи, информация, Создание сайтов в Рязани

Ул. Горького д.86, оф.14 Наш E-mail +7 (4912) 25-84-24
Создание сайтов в Рязани
Создание, раскрутка, оптимизация сайтов.
Главная | Статьи | Наши работы | Цены | Заказать | Контакты
Новости

18.04/2015
Разбработка мобильной версии Желтых Страниц Рязани
и доработка личного кабинета.

10.02/2015
Новый хостинг парнтер.

Разделы:
Изготовление сайтов

Оптимизация сайтов

Раскрутка сайтов

Размещение сайтов

Спецпредложения

Оригинальный подарок к новому году


Защита сайта
Как защититься от взлома сайта и хотлинка.

SQL взлом



Все больше и больше кодеров начинают делать в своих скриптах взаимодействие с базами данных. Как правило, используется MySQL (реже MSSQL). В данной статье я расскажу о мерах защиты PHP+MySQL, т.к. с MSSQL я не работаю и она дает куда больше возможностей для хакера, чем MySQL. Суть уязвимостей такого типа заключается в том, что через переменные которые передаются через параметр к скрипту и участвуют в SQL-запросе, злоумышленник может внедрить свой SQL-код и тем самым модифицировать запрос к БД. Я не буду подробно заострять внимание на самом принципе SQL-инъекций, а просто расскажу как их избежать. Тех, кто хочет узнать, как происходят SQL-инъекции, может прочитать о них тут Приведу не большой пример:

SELECT * FROM table WHERE user=$go

Допусти эта переменная $go передается как параметр к скрипту и выполняется SQL-комманда. Все бы хорошо, что хакер может в качестве значения к переменой передать user=lamer (обратите внимание на кавычку) и сам закрыть условие, а далее внедрить через ф-цию UNION (эта ф-ция появилась с MySQL4, а значит в более ранних версиях инъкция не получится) другую команду SELECT и тем самым получить конфиденциальную информацию из базы (например, пароли) если узнает ее строение. Если бы после условия шли бы еще какие то другие условия (не нужные хакеру), то он бы их смог легко обрезать так "-" или так "/*" (эти символы в MySQL означают дальнейший комментарий). Кстати, в MSSQL злоумышленниц мог бы поставить символ ";" (означающий конец команды) и внедрить новую (например, INSERT, UPDATE и т.п.).

Для решения проблемы с SQL-инъекциями нам необходимо фильтровать передаваемые в SQL-комманде переменные. Это достигается следующими способами:
1) Никогда не забывайте ставить значения в кавычки (это пригодится нам для дальнейшей фильтрации переменных). Т.е. так user=$go , а не так user=$go ! Кстати, если переменная является числом, то ее значение тоже можно указать в кавычках.
2) Если переменная является числом, то обезопасить ее можно очень легко, необходимо просто средствами PHP привести ее к числовому типу:
$go=(int)$go; или $go=intval($go);
3) Если переменная не является числом, то нам нужно просто отследить отсутствие кавычек, этого можно добиться ф-цией mysql_escape_string() (ее аналог является addslashes()). Ф-ция предназначена для того, чтобы ставить слеш перед кавычкой ('). Теперь даже если хакер попробует внедрить свой SQL-код, то он не выйдет за пределы кавычек.

Если вы являетесь параноиком, то можете сделать фильтрацию на основные ф-ции в MySQL, которые используются для инъекций: UNION и CHAR.


Дата публикации: 09/02/2015
Прочитано: 8482 раз
Дополнительно на данную тему:
Защита от hotlinking
Система защиты веб-портала. Часть 1
Система защиты веб-портала. Часть 2
Фильтрация данных в PHP
Методы проверки на правильность заполнения полей
Безопасное программирование на PHP
Советы по защите сайта
Что же делать? Как защититься от хаксоров?
Как защитить сайт
Хранение файлов за пределами корневого каталога документов

Назад | Начало | Наверх