Недавний пост о паролях I немного отклонился от темы и много об этом рассказал. Лакомый кусочек:
Как только вы довольны паролем, который они выбрали, сначала зашифруйте его с помощью PHP, а затем сохраните. Следующая функция шифрования пароля тоже не моя идея, но решает ряд проблем. Шифрование в PHP не позволяет людям на общем сервере перехватывать ваши незашифрованные пароли. Добавление чего-то для каждого пользователя, что не изменится (я использую электронную почту, так как это имя пользователя для моих сайтов) и добавление хэша (SALT — это короткая постоянная строка, которую я меняю для каждого сайта), повышает устойчивость к атакам. Поскольку SALT находится внутри пароля, а пароль может быть любой длины, становится практически невозможно атаковать его с помощью радужной таблицы. С другой стороны, это также означает, что люди не могут изменить свою электронную почту, и вы не можете изменить SALT, не аннулировав все пароли.
function password_crypt($email,$toHash) {
$password = str_split($toHash,(strlen($toHash)/2)+1);
return hash('sha256', $email.$password[0].SALT.$password[1]);
}
Итак, при первом вводе пароля пользователя в псевдокоде:
define(SALT,'blah');
$hashed_password = password_crypt($email,$password);
INSERT INTO users (email,hashed_password) VALUES ($email,$hashed_password);
Затем, чтобы проверить последующий вход в псевдокод:
define(SALT,'blah');
$user_hashed_password = password_crypt($_POST['username'],$_POST['password']);
SELECT email FROM users WHERE email = ? AND hashed_password = $user_hashed_password LIMIT 1
Если вы получите строку обратно, действительный логин.
person
Daren Schwenke
schedule
24.10.2009