Алгоритм сохранения учетных данных пользователя в базе данных по HTTP - PullRequest
0 голосов
/ 18 августа 2010

Есть ли какие-либо комментарии / улучшения в этом процессе?

Таблица пользователей: идентификатор, имя пользователя, пароль, соль

Сохранение нового пользователя

  1. Получите имя пользователя (открытый текст) из $ _POST
  2. Получите пароль (sha512'd с использованием javascript) http://pajhome.org.uk/crypt/md5/sha512.html из $ _POST
  3. Создайте соль из 128 символов (алфавитно-цифровая ссимволов) на сервере и сохраните его в столбце с солью
  4. Добавьте хэш пароля к соли и сохраните его в столбце с паролем

1 Ответ

2 голосов
/ 18 августа 2010

Да. Несколько вещей:

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

Правильный путь таков:

  1. Отправлять пароль на сервер только в зашифрованном виде по https (без Javascript)
  2. Генерация длинной случайной соли - используйте хороший генератор случайных чисел (не PHP rand ...)
  3. Добавить пароль к соли
  4. Сохраните хэш соли + пароль вместе с солью.

Затем для аутентификации:

  1. Отправлять пароль на сервер только в зашифрованном виде по https
  2. Получить соль из DB
  3. Добавить пароль к соли
  4. Вычислите хэш соли + пароля и сравните с тем, что у вас есть в БД
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...