Предлагаю обсудить такую важную тему, как переход на BCrypt.
В данный момент, если юзер не задаст wa_password_hash функцию, то по умолчанию будет использоваться обычный md5 в один проход без всяких солей и прочего (или я ошибаюсь?). Данные пароли можно расшифровывать на GPU очень быстро.
Предлагаю рассмотреть переход на BCrypt (PHP 5.5+). Если не брать в расчет версию PHP, то алгоритм можно сформировать как-то так:
- Юзер вводит пароль
- Если в установке зарегистрирована функция wa_password_hash, сравниваем с результатом этой функции, дальше не идем, т.к. скорее всего пароль уже сильнее чем просто md5.
- Если функции нет, то берем значение хеша лежащего в базе, если 32 символа - значит md5, в противном случае - bcrypt.
- Если md5, тогда сравниваем md5 пароля, который ввел юзер, с хешем, который только что взяли из базы, если совпадают - обновляем значение хеша на bcrypt.
- Если BCrypt, то...
- В следующий раз получим из базы >32 символа, и уже пойдем по ветке сценария на BCrypt.
Или, как минимум, рассмотрите генерацию соли при установке, как это сделано в том же Wordpress.
3 комментария
Никто не мешает сделать своё хеширование в конфигурации, кому надо те делают.
Он хочет на работающем проекте миграцию на более стойкое хэширование. И чтоб без принудительной смены паролей через восстановление. То есть перехэшировать, если нужно, при очередном логине
частичное решение здесь https://developers.webasyst.ru/forum/1921/bezopastnost-khesha-paroley/#comment124294