У меня есть сайт php, который позволяет зарегистрированным пользователям входить в систему (с действительным паролем) и настраивает сеанс на основе их идентификатора пользователя. Однако я почти уверен, что это взломано, и я нашел «новые» файлы на своем сервере, которые я туда не помещал. Мой сайт очищает весь пользовательский ввод от SQL-инъекций и XSS, но это продолжается. У кого-нибудь есть идеи, как это решить?
Я думаю, что мое PHP-приложение перехватывается сеансом?
Ответы (3)
Перехват файлов cookie сеанса НЕ должен позволять злоумышленнику создавать новые файлы на вашем сервере. Все, что он может сделать, это получить доступ к сеансу аутентифицированного пользователя. Это зависит от вашего кода и/или конфигурации сервера, которые позволят загружать произвольные файлы в корневой каталог сайта.
Чтобы проверить наличие удалённой компрометации, узнайте время создания подозрительных файлов (searches.php, 7.php.jpg) и т. д., а затем просмотрите журналы вашего сервера, чтобы увидеть, что происходило в это время. Если вы регистрируете идентификатор сеанса вместе с остальной частью обращения, вы можете тривиально увидеть, был ли сеанс взломан, поскольку он будет использоваться с двух или более разных IP-адресов в течение времени существования сеанса. Было бы особенно очевидно, если бы первоначальный пользователь вошел в систему с одного интернет-провайдера, а затем внезапно появился переход к совершенно другому интернет-провайдеру.
И, конечно же, как проходят ваши сессии? Печенье? PHP trans_sid (передача сеанса в скрытые поля формы и строки запроса)? Trans_sid особенно уязвим для перехвата, поскольку простой акт обмена ссылкой на что-то на вашем сайте также передает идентификатор сеанса, а любые внешние ссылки на вашем сайте будут иметь идентификатор сеанса, отображаемый в HTTP-реферере.
Решение, предложенное экспертами PHP, заключается в использовании уникальных ключей/токенов при каждой отправке форм, посмотрите на эту идею здесь, на net-tutes.
Не забудьте ознакомиться с Руководством по безопасности PHP. сильный>. Он охватывает такие темы, как XSS, спуфинг форм, SQL-инъекция, перехват сеанса, фиксация сеанса и многое другое.
Помните, всегда используйте правильные типы данных в своих запросах, например, используйте функцию int
или intval
перед числами и функцию mysql_real_escape_string
для строковых значений. Пример:
$my_num = (int) $_POST['some_number'];
$my_string = mysql_real_escape_string($_POST['some_string']);
Вы также можете использовать операторы prepend для своих запросов.
Популярный проект по защите PHP-приложений:
- Функции фильтрации XSS, Кристиан Стокер< /strong> (также используется платформой Kohana)
- Очиститель HTML (также используется Структура Kohana)
- Проект безопасности OSAP PHP
Я вернусь назад и скажу, что ваше «печенье» легко угадать.
Некоторые сайты, когда пользователь входит в систему, просто создают файл cookie, а код аутентификации просто проверяет наличие файла cookie.
Теперь, если я зарегистрируюсь и войду на ваш сайт, а затем открою ваш файл cookie и замечу, что вы просто сохраняете мой идентификатор пользователя, тогда я могу изменить значение на какой-либо другой идентификатор пользователя и вуаля!
Вы поняли идею.