Должен ли сеанс PHP быть создан до входа или после успешного входа - PullRequest
5 голосов
/ 05 августа 2009

Если PHP-сессия создается перед входом в систему, для каждого запроса на страницу входа создается один файл сессий.

Проблема в том, что если пользователь делает несколько запросов к серверу с помощью скрипта, то эти многие файлы сеансов будут созданы.
Если пользователь хочет атаковать сервер, он может отправлять необычно огромное количество запросов, создавая столько файлов сессий, которые занимают все временное пространство и делают службу недоступной.
Я не уверен, что такая атака действительно возможна / осуществима.

Пожалуйста, поделитесь своими комментариями по этому поводу и последствиям, если сеансы PHP создаются до / после успешного входа.

Ответы [ 4 ]

5 голосов
/ 05 августа 2009

Я думаю, что вы неправильно понимаете session_start ()

Что происходит с session_start, так это то, что да, он создаст файл для отдельного пользователя. Но в следующий раз, когда вы вызовете session_start (), он будет использовать этот же файл для того же пользователя, потому что у пользователя есть cookie в его системе, который сообщает ему, какой идентификатор использовать. Чтобы массив $ _SESSION был доступен, вы должны вызывать session_start () на каждой странице.

Вполне возможно, что кто-то может разыграть сценарий, как вы только что описали.

На самом деле, да, у хакера всегда может быть робот, который очищает свои куки-файлы после каждой попытки, делает 10 000 запросов и, возможно, создает проблему с записью на диск, но я действительно не стал бы беспокоиться об этом слишком сильно, потому что файлы крошечные, намного меньше, чем сценарий, который вы пишете. Вам бы пришлось написать намного больше файлов (размером в миллионы или миллиарды), чтобы создать проблему.

Если вы действительно хотите увидеть, какие эффекты будут на вашем сервере. Напишите скрипт, который создает файлы в каталоге с эквивалентом 2 абзаца текста. и поместите его в цикл для 10 000 файлов.

Если вы потом беспокоитесь о возможном влиянии, я предлагаю внедрить трекер, который может видеть большое количество посещений, приходящих на сайт с одного IP-адреса, а затем либо временно блокировать IP-адрес, либо делать то, что Google делает и просто предоставляет им статическую страницу капчи, которая не требует много ресурсов для обслуживания.

Итак, возвращаясь к актуальному «вопросу»:

Я установил сеанс для каждого пользователя, который когда-либо посещал мой сайт, потому что я использую сеансы не только для аутентификации пользователя, но и для отслеживания других переменных на моем сайте. Поэтому я считаю, что вы должны установить его, даже если они не вошли в систему.

1 голос
/ 05 августа 2009

Если вас беспокоит атака с фиксацией сеанса, подумайте об использовании функции session_regenerate_id () .

0 голосов
/ 05 августа 2009

Это не имеет значения, правда. Ваш сервер, какой бы дешевой он ни был, будет иметь достаточно места для хранения миллионов (почти пустых) файлов сеансов.

В худшем случае это замедляет доступ к файлам в папке, где хранятся файлы сеанса, но для начала следует проверять диски вашего сервера, и в какой-то момент быстро заполняющийся раздел / tmp должен вызывать предупреждение.

0 голосов
/ 05 августа 2009

после запуска session_start () создает файл. то, что вы можете сделать в качестве атаки, - это создать робота для отправки отдельного идентификатора сеанса в куки, но нужно просто указать, что он существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...