В статье Основные виды вирусов на сайтах я начал вводить читателей в основные понятия безопасности и защиты сайтов. Здесь я планирую просвятить в основные разновидности уязвимостей, на деле их намного больше и порой они пересекаются между собой, что не всегда слишком легко отнести уязвимость к определенному виду.
Начну с наиболее известных и распространенных видов уязвимостей. Это XSS и SQL инжекты (injection).
XSS в переводе с английского означает межсайтовый скриптинг (Cross Site Scripting). Хоть и в сокращении должно быть CSS, но дабы избежать недоразумений с каскадными стилями решено было обозвать аббревиатурой XSS. Уязвимость позволяет злоумышленнику внедрять участок кода в формируемую или сгенерированную html-страницу пользователя. Наибольшее применение находит в краже куков и подгрузке ифреймов. На данный момент в чистом виде ( при отсутствии сторонних уязвимостей и адекватных настроек веб-сервера) представляет минимальную угрозу (по той причине, что не позволяет изменять код на сервере, а только отданный код на стороне пользователя). Но при всём этом считается критической узвимостью безопасности с высоким приоритетом исправления.
Ещё один вид внедрения кода - это внедрение SQL-инжекта (injection). Этот тип уязвимости позволяет получить доступ к базе данных, записи и редактировании файлов и выполнении произвольных команд. Наличие SQL дыры - по этой причине происходит взлом множества сайтов. Подразновидностью можно назвать так называемую слепую SQL (Blind SQL) - тип уязвимости, атаки которого зависят от ответа сервера. Зачастую хакер не знает исходного кода скрипта, однако он получает некоторую информацию в виде ошибки или предупреждения. В таких случаях обычно приходится перебирать значения, чтобы реализовать атаку и получить доступ к значения базы данных.
При всём этом у SQL-inject и XSS-inject общая природа возникновения. Причиной появления бреши на сайте чаще всего бывает недостаточная фильтрация строковых данных или их некорректная обработка. Для большей ясности рассмотрим небольшой пример. Пусть у нас будет какое-то текстовое поле (пусть будет та же форма обратной связи), вводимые параметры которого обрабатывает файл unprotected.php. В нашем файле будет отправка передаваемого параметра на почту.
$message .= '<p>Имя: '.$_POST['name'].'</p>'
Как видно, наши данные никак не фильтруются. И если мы напишем
Protect ' echo "Защити свой сайт"; /*
то наш код преобразится следующим образом:
$message .= '<p>Имя: Protect ' echo "Защити свой сайт"; /* .'</p>'
результатом выполнения которого письмо уже не будет отправляться, а выведется текст "Защити свой сайт". Оставшийся код закомментируется ( по крайней мере до следущего закрытия комментария. Вот это простой пример на практике.
Теперь я думаю понятно, зачем важны так дополнительные проверки и фильтрация данных, особенно кавычек.
Еще одним частым аспектом взлома сайтов бывает уязвимость загрузки файлов (File Upload). Суть атаки заключается в загрузке вредоносного кода на сервер, а затем его дальнейшее выполнение и получение доступа к управлению сайтом. Здесь существует много разновидностей данного типа уязвимости, да и я сказал бы нельзя отдельно выделить это как тип, потому что многие методы загрузки файла подразумевают использование других дыр на сайте.
Мы снова взглянем со стороны, а откуда возникает данная уязвимость? В большинстве случаев это недостаточная обработка типов и расширений файлов, которые позволяют загрузить шелл на сайт и выполнить его. Как простой пример хакер часто используют двойное расширение для загрузки файла (shell.php.jpg), подмена MIME типов ( как вариант в начало строки записать GIF89a1 сделав файл якобы картинкой, а далее код исполняемого вируса) и множество других способов. Часть действенных способов по защите я описал в материале "Как защитить сайт от попадания вирусов".
Теперь поговорим об уязвимости, которая раньше присутствовала чуть ли не на каждом втором сайте (хотя и сейчас хватает сайтов с такой уязвимостью). Мы поговорим о CSRF ( или же расшифруем как Сross Site Request Forgery - в переводе с английского Межсайтовая подделка запроса). Как говорится из названия, мы можем управлять данными с уязвимой формы уязвимого сайта с любого другого сайта, вплоть до локального. Для этого нам не надо красть чужие куки, запрос будет выполняться от нашего имени, если мы залогинены на уязаимом сайте. Как это работает? Для простого примера можно сохранить страницу с уязвимой формой в виде html страницы. После этого мы можем локально запустить файл, ввести некоторый текст в форму и отправить. Если при этом данные успешно отпрвились - это означает, что уязвимость успешно проявилась. Суть упущения заключается в отсутствии проверки запроса, и решается простым добавлением токена.
Похожее сокращение имеет SSRF (Server Side Request Forgery) - этот тип атаки позволяет исполнять сторонний код. Разделяется на локальный ( то есть только внутри сайта) и гораздо реже можно исполнять произвольный код с любого стороннего сервера.
На этом я буду закругляться, если что-то упустил, то обязательно напишите об этом в комментариях.
RSS лента комментариев этой записи