Большинство сайтов в сети интернет открыто для внешних воздействий со стороны хакеров. Даже масштабные дорогие интернет проекты взламывают: оставляют следы или уводят базу данных. В результате страдает владелец ресурса, а так же посетители.
Чтобы избежать проблем взлома требуется выполнить ряд мер во время разработки cms сайта. Некоторые профилактические действия нужно проводить в процессе работы сайта.
В прошлых статьях я показал, как выполняются csrf и xss атаки на сайт, а так mysql иньекции и атаки на файловую систему сервера. Сегодня речь пойдет о перехвате и защите сессий взломщиками.
Сессия сайта
PHP – наверное, самый распространенный серверный язык программирования для сайтов. В php сессия сайта стартует с помощью команды session_start(). Перед стартом можно указать дополнительные параметры. В сессии обычно хранят важную личную информацию о пользователе: логин, имя, пароль,..
Перехват Сессии
Есть 2 способа хранения идентификатора сессии: в куках и в адресной строке. Первый вариант более надежный, чем второй, однако оба поддаются взлому в той или иной степени. Данный вид взлома называется перехват сессии.
Пусть идентификатор хранится в урле сайта. Залогинившийся посетитель, гуляя по страницам вашего сайта, решает с кем-то поделиться интересной ссылкой. Публикуя ссылку, он отдает ссылку со своим идентификатором сессии. Если на сайте отсутствуют какие-либо дополнительные методы защиты, то, перейдя по такой ссылке, новый посетитель уже будет залогинен под первым пользователем, если сессия еще не закончилась. Далее делай на сайте что хочешь в разрешенных правилами рамках.
С куками дела обстоят сложнее, но тоже все достаточно легко перехватывается. Многие сайты при публикации информации пользователями не фильтруют браузерные скрипты. Потенциальный взломщик размещает такой скрипт на странице. Залогиненный посетитель заходит на страницу… Скрипт считывает значение кук или адресную строку и передает идентификатор сессии на другой сайт. Другой сайт принадлежит хакеру. Далее все просто. Подделывается кука или вводится адрес страницы сайта с нужным идентификатором сессии.
Взлом сессии
При старте сессии во временной директории создаются файлы сессии. В этих файлах хранится информация. Если используется виртуальный хостинг, то, обычно, временная папка для хранения сессий общая у всех сайтов на сервере. Далее определенным образом выполняется считывание данных сессии своим скриптом. Для этого злоумышленник должен иметь аккаунт на этом же сервере. В результате, если в сессии хранится пароль от сайта или номер кредитки с cvv кодом, то все эта полезная информация попадет в руки злоумышленника.
Защита от взлома данных сессии
- Хранить сессию в куках. Сложнее увести.
- Привязывать сессию к ip адресу компьютера. При заходе с другого ip создается новая сессия в зависимости от настроек скрипта.
- Привязывать сессию к юзер агенту браузера. При заходе с другого браузера сессия обнуляется.
- Шифровать передаваемые в сессию параметры. Если злоумышленник получит файл сессии, то он не сможет его прочитать. Хотя при наличии определенных навыков, расшифровать сессию тоже возможно.
- Хранить идентификаторы сессии в отдельной папке. В php для этого существует команда session_save_path($path_to_dir). Эту же настройку можно прописать в файле php.ini. Параметр называется session.save_path.
- Использовать session_set_save_handler() в php для переопределения способа хранения сессии. А начиная с PHP 5.4 можно передать объект типа SessionHandlerInterface в session_set_save_handler().
Вот они основные правила защиты сайта от перехвата сессии. Если есть вопросы, то задавайте.
Перехват пользовательской сессии и способы защиты,