Самый безопасный способ создания сессий в php - PullRequest
2 голосов
/ 15 апреля 2009

Я работаю над сайтом и хочу создать логин и сеанс пользователя. Какой самый безопасный способ проверить, существует ли сессия или нет (например, cookie или проверка переменных сеанса), или какая-нибудь лучшая идея, чем использование сессий в php?

Ответы [ 2 ]

8 голосов
/ 15 апреля 2009

session_id() возвращает идентификатор сеанса для текущего сеанса или пустую строку (""), если текущий сеанс отсутствует (идентификатор текущего сеанса не существует).

http://de.php.net/manual/en/function.session-id.php

но это просто говорит вам, активен ли сеанс или нет.

Большую часть времени я просто вызываю session_start(); в начале каждого сценария (даже если пользователь не вошел в систему). при входе в систему я устанавливаю $_SESSION['user'] с идентификатором пользователя или объектом пользователя. на выходе, я просто unset($_SESSION['user']);. проверяя empty($_SESSION['user']), я могу проверить, вошел ли кто-то в систему или нет. не делайте этого, если вы храните зависимую от пользователя информацию в другом месте вашего сеанса, иначе следующий входящий в систему парень может получить информацию, которую он не должен видеть (в этом случае используйте session_destroy();).

но безопасность? просто отключите распространение идентификатора сеанса с помощью переписывания URL-адресов GET / POST (только файлы cookie), чтобы они не заканчивались URL-адресами, которые можно кэшировать или передавать другим (в этом случае возможен перехват сеанса). Вы можете сделать это, установив session.use_only_cookies в php.ini.

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

кроме этого ... используйте ssl / https для входа в систему и управления пользователями, поэтому пароли в виде открытого текста не передаются. хранить в базе только pw-хэши с солью. не позволяйте никому видеть пароли (то есть: никогда не печатайте их в HTML или по электронной почте). не используйте значения auto_increment для идентификаторов, которые пользователь может видеть (и, следовательно, догадываться). хорошо, это уже выходит за рамки вопросов.

1 голос
/ 15 апреля 2009
...