Как я могу создать защищенную систему «Запомнить меня», используя PHP?
-
01-10-2019 - |
Вопрос
У меня есть система входа в систему. Как я могу реализовать безопасный Запомни меня Система с помощью файлов cookie.
Какую ценность мне нужно хранить в файле файлов cookie и паролем, но как я могу его защитить?
Решение
Определите пользователь Salle Foreach в БД, то
на настройке
$expire_time = time() + 2 * 7 * 24 * 3600; // 2 weeks exp time
setcookie(
"rememberMe",
crypt($username, $salt),
$expire_time,
'/'
);
на проверке
$_COOKIE['rememberMe'] === crypt($username, $salt)
Другие советы
Может быть, вы можете создать 16 Star Letter / Number String, которая связана в базе данных с этим пользователем и MAC-адресом, так что (до тех пор, пока люди не пытаются слишком твердые и подделки Mac), только эта машина может войти в систему.
Может быть, вы должны хранить (в вашем БД) посетителей IP, пользовательский агент, часовой пояс или установленные плагины. Что-то, что может быть легко получить JavaScript, поскольку получение MAC-адреса может быть проблемой.
Тогда вы можете легко проверить, имеет ли пользователь одинакового IP, UA, часовой пояс или плагины, как в последний раз :) или вы можете использовать MaxMind, чтобы проверить его местоположение и подтвердить, использует ли он правильный часовой пояс. Если есть что-то подозрительное, вам следует отказаться от учетных данных cookie.
Это не так много ... Не позволяйте вашим файлам сеанса очистить (настройка INI session.gc_probability = 0
), и измените сеанс cookie из временного для постоянного (настройка INI session.cookie_lifetime = however_long_you_want_the_user_to_be_remembered
).
Конечно, вы, вероятно, захотите в конечном итоге очистить устаревшие файлы сеанса, чтобы вы могли экспериментировать с очень Низкая вероятность очистки, происходящего или выполняет некоторую внешнюю очистку. В любом случае, пока пользователь держит сеанс cookie вокруг, и вы держите файл сеанса вокруг, они будут «запомнить».