Большинство систему управления сайтом таких как друпал, вордпресс, джумла, опен карт и другие по умолчанию защищены от большинства видов атак, но и в них время от времени находят дыры. Такие дыры надо латать и как можно быстрее. Про большинство самописных скриптов, написанных на коленках, вообще не хочется говорить. Наверняка там есть дыры, просто о них еще никто не знает…
Важная проблема взлома сайта — проседание сайта в поисковой выдаче, т.е. все ваши старания по продвижению сайта в поисковых системах могут оказаться бесполезными. Сайт вернется в топ только через некоторое время после возвращения сайта к нормальной работе.
В прошлый раз мы рассмотрели XSS и CSRF атаки на сайт и способы их предотвращения. Сегодня рассмотрим взлом сайта с помощью SQL инъекций и файловой системы, а так же методы защиты от таких посягательств на сайт.
Предотвращение SQL инъекций
Очень часто в адресной строке сайта размещаются параметры, влияющие тем или иным образом на содержание страницы. Например эти параметры могут быть значением, подставляемым в mysql запрос.
Например, ссылка вида: site.ru/index.php?pageid=100 . Параметр pageid = 100 говорит о том, что нужно выбрать из какой-то таблицы строку с идентификатором = 100.
Злоумышленник, же как всегда может что-то подправить в адресной строке и получить дополнительные плюшки вплоть до логинов/паролей, удаления все базы данных или получения полного управления вашим сайтом.
Как узнать возможна ли mysql инъекция на вашем сайте
Самый простой вариант проверки – написать вместо site.ru/index.php?pageid=100 вот такой код: site.ru/index.php?pageid=99+1.
Если параметр pageid не фильтруется, то перед выполнением sql инъекции произойдёт сложение 99 и 1. В результате вы увидите страницу с pageid=100.
Если вам показывается страница отличная от страницы с параметром pageid=100, значит входной параметр проверяется… Однако, не зная способа проверки параметров у сайта, неизвестно фильтрует ли он все лишние символы или нет. Так что угроза взлома все еще существует…
Как защищаться от mysql инъекций
Защита от sql инъекций – это фильтрация используемых в mysql запросе параметров и приведение их к необходимому виду. В нашем случае мы знаем, что параметр pageid должен быть числом, т.е. должен содержать только цифры. Значит перед выполнением mysql запроса мы должны проверить является ли параметр числом и если не является, то выдать ошибку или привести значение в число.
Только методичная и тщательная проверка вводимых данных и их фильтрация защитят от mysql инъекций. В помощь могут прийти уже разработанные классы для работы с базами данных.
Защита файловой системы веб сервера
Все скрипты, располагаемые на стороне веб сервера могу выполнять произвольные действия с файлами и папками. В результате потенциальный взломщик может попытаться либо использовать уже существующие скрипты, либо загрузить свои скрипты и выполнить их.
Основной способ защиты – ограничение прав доступа к папкам и файлам. Для папок по умолчанию в линукс системах ставятся стандартные права доступа (CHMOD) 644, для файлов – 755.
Если ваш скрипт в зависимости от параметра выполняет подключение или получение данных от различных файлов, то этот параметр обязательно нужно фильтровать!!! В противном случае злоумышленник (хакер) может получить полный или частичный доступ к файловой системе вашего сайта.
Выводы
Как вы уже удостоверились — защита от хакерских атак заключается в проверке (валидации) всех вводимых параметров.
Как взламавают сайты и как защититься от взлома,
Надо подходить к делу профессионально. Необходимо оценить возможный ущерб от несанкционированного доступа и принять меры, соответствующие вашему ущербу.