2010-09-05 2 views
11

У меня есть система входа в систему. Как я могу реализовать безопасную помню меня с использованием файлов cookie.Как создать защищенную систему «запомнить меня» с помощью PHP?

Какое значение следует хранить в имени пользователя и пароле cookie, но как я могу его защитить?

+0

я пытался хранить имя пользователя и пароль в печенье – Saqueib

+1

OK. Это начало. Но если я перехвачу этот файл cookie, то вы останетесь открытым. Посмотрите на следующее: http://stackoverflow.com/search?q=php+session+hijacking –

+0

Плохая идея. Мало того, что кто-либо на этой машине может читать комманду user + pass, но любой XSS, который отправляет 'document.cookie', сможет просматривать ваше имя пользователя/пароль дословно. – alex

ответ

1

определить пользователь соли Еогеаспа в дб затем

по настройке

$expire_time = time() + 2 * 7 * 24 * 3600; // 2 weeks exp time 

setcookie( 
    "rememberMe", 
    crypt($username, $salt), 
    $expire_time, 
    '/' 
); 

по проверке

$_COOKIE['rememberMe'] === crypt($username, $salt) 
-1

Там не так много ... не позволяйте очищать файлы сеанса (ini setting session.gc_probability = 0) и сменить сессионный файл cookie с временного на постоянный (ini-настройка session.cookie_lifetime = however_long_you_want_the_user_to_be_remembered).

Конечно, вы, вероятно, захотите в конечном итоге очистить устаревшие файлы сеанса, чтобы вы могли поэкспериментировать с очень низкой вероятностью очистки или выполнить некоторую внешнюю очистку. В любом случае, пока пользователь хранит файл cookie сессии и вы храните файл сеанса, они будут «запоминаться».

+2

Я думаю, что набор файлов cookie с 'setcookie()' был бы лучшей идеей, а не позволял сессиям никогда не истекать. – alex

+1

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

0

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

0

Возможно, вам следует хранить (в вашем DB) посетителя IP, User Agent, часовой пояс или установленные плагины. Что-то, что может быть легко получить с помощью Javascript, поскольку получение MAC-адреса может быть проблемой.

Затем вы можете легко проверить, имеет ли пользователь тот же IP, UA, часовой пояс или плагины, что и в прошлый раз :) Или вы можете использовать MaxMind, чтобы проверить его местоположение и подтвердить, использует ли он правильный часовой пояс. Если есть что-то подозрительное, вы должны отказаться от учетных данных cookie.

Смежные вопросы