Зарегистрироваться:
$users->setSalt(md5(time()));
$encoder = new MessageDigestPasswordEncoder('sha1', true, 1);
$password = $encoder->encodePassword($users->getPassword(), $users->getSalt());
$users->setPassword($password);
Результат примерно такой: qSmJxDmP8WhVJZIiJpeVLJFLnio = Итак, пароль безопасен. Но как проверить это тот же пароль, когда пользователь пытается войти? (пароль пришел из формы, он равен паролю в базе данных)
Я смущен, потому что есть соль, которая каждый раз уникальна. Что такое лучшая техника?
Комментарий @Deepak правильный. Соль не должна быть уникальной по каждому запросу. Он должен быть уникальным универсальным и назначаться квази-постоянно для учетной записи пользователя.
Вы сохраняете то же значение соли, которое использовалось для создания хэша пароля при установке пароля.
Затем, когда вы проверяете пароль, предоставленный пользователем, вы используете то же значение соли, вычисляете новый хеш и сравниваете его с сохраненным хэшем. Если они совпадают, у вас есть победитель.
Ваши пароли хранятся как соли, нет?
session_start();
Имейте функцию logIn(), чтобы проверить каждое безопасное действие с помощью logOut(), запросить свою БД по имени пользователя из $ _POST ['username'] или $ _SESSION ['username']
$user = DB_QUERY_BY_USERNAME;
if ( !$user ) { logOut(); }
if ( $_POST['username'] && $_POST['password'] )
{
if ( $user['password'] != md5( $_POST['password'] . $user['salt'] ) )
{
logOut();
}
}
else if ( $_SESSION['username'] != $user['username'] )
{
logOut();
}
// Logged in, renew cookies, update DB, set $_SESSION variables
$_SESSION['username'] = $user['username'];