Я создаю систему входа, и я хочу, чтобы она была безопасной, чтобы я мог повторно использовать ее для нескольких проектов. Я использую функцию ниже, чтобы зашифровать данный пароль с помощью моего секретного ключа (32 символа).PHP-система на основе токенов
function Encrypt($key, $payload)
{
$iv = mcrypt_create_iv(IV_SIZE, MCRYPT_DEV_URANDOM);
$crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $payload, MCRYPT_MODE_CBC, $iv);
$combo = $iv . $crypt;
$garble = base64_encode($iv . $crypt);
return $garble;
}
Мой IV_SIZE заключается в следующем:
mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC))
Прежде чем спросить я не позволяют пользователям вводить пароль. Я генерирую очень сложный и длинный пароль для них со всем внутри (в верхнем, нижнем регистре, цифрами и символами). Я также внедрил систему запретов, которая позволяет вставлять неверный пароль в течение ограниченного количества раз, и, как если бы этого было недостаточно, я также блокировал всю учетную запись, чтобы вы не могли попробовать снова, даже если срок действия запрета истек.
Это функция расшифровывать все еще довольно стандартны:
function Decrypt($key, $garble)
{
$combo = base64_decode($garble);
$iv = substr($combo, 0, IV_SIZE);
$crypt = substr($combo, IV_SIZE, strlen($combo));
$payload = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $crypt, MCRYPT_MODE_CBC, $iv);
return $payload;
}
Говорит, что это 2 часа, что я пытаюсь выяснить, что это лучший подход к выдаче Войти сессию/куки. Я хочу использовать подход, основанный на токенах, как показано ниже.
Как только логин будет успешным, я хочу сохранить в cookie первую часть хэша. Весь хэш хранится в моей БД и уникален. Вторая часть будет чем-то вроде соли + sha/md5/base64 (...) идентификатора пользователя, электронной почты, метки времени и т. Д. Это хороший подход?
Это действительно зависит от требований вашего проекта. Если вы не планируете получать много трафика или иметь много ресурсов сервера, я предлагаю использовать БД в качестве способа хранения сеансов и т. Д. Причин как то более надежный, чем другие. Все, что вам нужно сделать, это сохранить временную метку. В большинстве случаев это настойчиво. Пользователи могут закрыть браузер, перезагрузить свой компьютер и вернуться и все еще иметь активный сеанс и т. Д. Однако этот подход будет использовать больше ресурсов сервера, чем другие обычные методы, поскольку он должен запрашивать БД каждый раз, когда перезагружается страница. – khuderm
Вам просто нужно взвесить, какая опция лучше подходит вам, а не выбрать тот, который говорит человек, лучший – khuderm