Проверка PHP-сессий - лучшие практики - PullRequest
1 голос
/ 10 февраля 2011

У меня есть база данных, в которой я храню идентификаторы сессий после их проверки пользователем.

С точки зрения безопасности, должен ли я проверять идентификатор сеанса по идентификатору сеанса, хранящемуся в базе данных, для каждой доступной защищенной страницы?

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

С точки зрения производительности - если бы я проверял идентификатор сеанса по базе данных для каждого запроса, было бы значительно эффективнее хранить проверенные идентификаторы сеанса в их собственных текстовых файлах вместо того, чтобы делать так много запросов к базе данных?

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 10 февраля 2011

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

Было бы неэффективнее проверять идентификаторы сеанса в текстовом файле по сравнению сбаза данных, если ваша СУБД поддерживает кэширование результатов (MySQL вызывает это кэширование запросов).

Если ваш запрос просто проверяет существование идентификатора сеанса, например SELECT COUNT(session_id) FROM sessions WHERE session_id = ? (вы используете параметризованные запросы для предотвращения внедрения SQL, верно?), Тогда это может быть кэшировано (хотя MySQL может не делать этого в более ранних версияхчем 5.1.17).

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

2 голосов
/ 10 февраля 2011

О безопасности:
Вы сами достаточно хорошо описываете риск угона. Более важным является вопрос о том, насколько вероятно это произойдет и насколько чувствителен ваш сайт / данные.

Теперь, если кто-то перехватит компьютер зарегистрированного пользователя, который не уничтожил сеанс (выйдет из системы), как бы вы это определили? И почему / как идентификатор сеанса должен измениться и оставаться действительным?
Вероятно, было бы лучше проверить личность вызывающего абонента, открыв файл cookie, проверив ip (при повторном входе в ip change), ...

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

-> Поправь меня, если я ошибаюсь ...

1 голос
/ 10 февраля 2011

С точки зрения безопасности, я должен проверять идентификатор сеанса с идентификатор сеанса хранится в базе данных для каждая защищенная страница, к которой осуществляется доступ?

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

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

0 голосов
/ 10 февраля 2011

Вообще говоря, проверка и восстановление идентификатора сеанса происходит при изменении статуса пользователя. IE: пользователь X получает доступ администратора: необходимо проверить идентификатор сеанса до предоставления доступа и заново создать новый идентификатор после операции.

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