Безопасны ли куки для сессий PHP? - PullRequest
7 голосов
/ 19 января 2011

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

Я использую HTTPS для входа в систему.Насколько я понял, данные сеанса из PHP никогда не отправляются пользователю, а хранятся на стороне сервера.Клиент получает только идентификатор для сеанса.Данные сеанса содержат фактический сеанс пользователя веб-приложения, который, в свою очередь, используется для проверки правильности входа в систему.Все хорошо и прекрасно.

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

РЕДАКТИРОВАТЬ 1

Это дополнение для@ircmaxell

Я опробовал ваш метод, но каким-то образом я все еще получаю cookie, когда переключаюсь с HTTPS обратно на HTTP.Это должно работать следующим образом.Всякий раз, когда сервер знает, что сеанс пользователя доступен, он устанавливает флаг безопасности.Это означает, что весь сайт работает по протоколу SSL, как только вы вошли в систему, и отказывается отдавать / использовать cookie, если вы не используете SSL.Или, по крайней мере, в этом и заключается идея.

if ($SysKey['user']['session_id'] != '') {
   session_set_cookie_params(60*60*24*7, '/', $SysKey['server']['site'], true, true);
}

Я предполагаю, что мне нужно восстановить идентификатор, так как в браузере уже был файл cookie перед входом в систему, но, поскольку я могу попробовать его только через несколько часов, я 'Спросите здесь, прежде чем пытаться

ПРИМЕЧАНИЯ К РЕШЕНИЮ

Я только что узнал, что вам нужно установить эти настройки перед началом сеанса.Это была моя проблема.Я сейчас использую 2 разных куки.Один для обычного гостя, отправляемого через http, и второй для зарегистрированных пользователей, который отправляется только через ssl.

Ответы [ 2 ]

10 голосов
/ 20 января 2011

Даже не думайте о развертывании собственного обработчика сеансов!

Сеанс PHP много раз прерывался, и поэтому теперь он стал более безопасным, чем когда-либо прежде.При обнаружении новой проблемы она будет исправлена ​​быстро и за БЕСПЛАТНО .Однако вы можете добавить следующие опции:

session.cookie_secure=True
session.cookie_httponly=True
session.use_cookies=True
session.use_only_cookies=True
7 голосов
/ 19 января 2011

Я думаю, что функция, которую вы ищете, это session_set_cookie_params(...). Это позволит вам установить флаг cookie secure , чтобы сделать его только https.

Вы можете проверить по: session_get_cookie_params()

...