php с использованием сеансов или файлов cookie для авторизации пользователя

Я работаю в классе авторизации пользователей php, и теперь я запутался в сессиях и файлах cookie. Я узнал, что WordPress не использует сеансы, и спросил некоторых PHP-программистов, достаточно ли файлов cookie для безопасности. Большинство из них сказали, что: вы должны использовать сеансы для безопасности, файлы cookie могут быть изменены.

Однако я использую функцию hash_hmac (md5) с IP-адресом пользователя, паролем и датой истечения срока действия файла cookie, и никто не может расшифровать мой зашифрованный код файлов cookie. Теперь я думаю, что файлы cookie могут быть такими же безопасными, как сеансы. Теперь мне интересно, быстрее ли использование файлов cookie, чем сеансы, или нет. Я провел несколько тестов и обнаружил, что использование файлов cookie работает быстрее, чем использование сеансов.

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


person burak emre    schedule 02.04.2011    source источник


Ответы (1)


Я использую функцию hash_hmac (md5) с IP-адресом пользователя, паролем и датой истечения срока действия файлов cookie, и никто не может расшифровать мой зашифрованный код файлов cookie.

Вы просто подписываете данные cookie с помощью HMAC? Похоже на то. Все, что делает HMAC, — это доказывает, что сообщение не было подделано. Кроме того, ограничение IP-адреса будет сильно раздражать пользователей за определенными прокси-серверами.

Поскольку HMAC — это просто подпись, данные cookie по-прежнему могут быть прочитаны и полностью не зашифрованы, если только вы не сделали это отдельно. Если вы поместили в этот файл cookie какие-либо данные, которые позволили бы третьей стороне отслеживать доступ к сайту в качестве вашего пользователя (например, простой несоленый хэш пароля пользователя), то HMAC совершенно бесполезен.

Если вы хотите поместить конфиденциальную информацию в файл cookie, вы должны использовать здесь настоящее шифрование, а не просто подписывать данные. (Читайте: сделайте и то, и другое.)

Если вы не можете выполнить фактическое шифрование данных, а данные настолько опасны, что их необходимо защитить от посторонних глаз, вам не следует отправлять их в файле cookie. Или весь ваш сайт должен обслуживаться через SSL. Или оба.

Но давайте перейдем к сути вопроса:

Если вы пытаетесь просто определить, вошел ли текущий пользователь в систему, сеансы — это фантастический выбор. Трудно заставить их не работать.

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

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

Что касается того, почему Wordpress якобы избегает сеансов... ну, Wordpress не является образцом хорошего дизайна и пошел на огромные компромиссы во имя работы практически везде. . Виртуальный хостинг — это ад.

person Charles    schedule 04.04.2011
comment
WordPress не использует сеансы, потому что на общем хосте другие пользователи могут получить доступ к вашим файлам сеансов; взломать ваших пользователей может быть так же просто, как получить учетную запись на том же сервере. То, как они это делают, намного безопаснее в общей среде. - person Erik; 04.04.2011
comment
@ Эрик, это хороший момент. Тем не менее, мне просто интересно, почему они не выбрали сеансы с поддержкой базы данных. - person Charles; 04.04.2011
comment
Спасибо за ваш ответ @Charles. Мои куки такие: USER_ID|TIMESTAMP_FOR_EXPIRING_DATE|HASH. И пока я создаю данные HASH, я использую функцию hash_hmac следующим образом: hash_hmac('md5', USER_IDTIMESTAMP_FOR_EXPIRING_DATEBROWSER_INFORMATION*USER_PASS, SECRET_KEY (этот ключ определен в файле php)). Пока я подтверждаю логин пользователя, я проверяю HASH. Если HASH-код верен, я проверяю информацию USER_ID и разрешаю вход. Я думаю, что мои файлы cookie безопасны, но есть одна проблема с использованием файлов cookie: я не могу использовать функцию «Не напоминать мне», потому что мне нужно выбрать определенную дату. - person burak emre; 04.04.2011