Извлеките хэшированный пароль PHP из базы данных и проверьте на соответствие отправленному паролю в Javascript

#php #javascript #jquery #ajax #forms

#php #javascript #jquery #ajax #формы

Вопрос:

У меня есть страница параметров в моем проекте, и на ней я могу изменить свой пароль. У меня есть форма, в которой вас просят ввести текущий пароль, новый пароль и подтвердить пароль. Я проверяю все данные на наличие ошибок и отправляю их на сервер, используя jQuery ajax.

Единственная проблема, с которой я сталкиваюсь, заключается в том, что мне нужно сверить мой текущий пароль с паролем, хранящимся в базе данных.

Пароль базы данных хэшируется с использованием PHP SHA1($database_password.$salt);

Я думал, что каким-то образом передам переменные PHP, $database_password и $ salt в Javascript, а затем использую sha1() js альтернативный sha1 javascript-код, чтобы проверить, совпадает ли мой текущий пароль с паролем базы данных.

Кто-нибудь может дать мне какие-либо указания или есть альтернативные способы?

Комментарии:

1. Почему вы хотите протестировать это на клиенте? Более того, зачем вы вообще запрашиваете текущий пароль, если пользователь вошел в систему?

2. @Marcel Korpel: Запрос текущего пароля является мерой безопасности. Если вы вошли в систему и отошли от своего компьютера, кто-то другой не сможет изменить ваш пароль, не зная текущего пароля.

3. @Arjan: да, я знаю, но уход в любом случае сопряжен с риском: кто-то может отправлять письма от вашего имени, взаимодействовать с системой и т.д. В любом случае, я бы сказал: просто не проверяйте это на клиенте, просто проверьте соответствие и сложность нового пароля и оставьте сравнение серверу, это избавит вас от многих хлопот и в обычных случаях вряд ли ухудшит пользовательский опыт.

Ответ №1:

Я думаю, что лучше оставить хэш пароля на сервере. Вы можете выполнить ajax-запрос с текущим паролем и попросить сервер подтвердить его. Таким образом, хэш остается неизвестным пользователю, и атака методом перебора становится более сложной.

Конечно, вы должны отправлять текущий пароль (и новый пароль) только после того, как пользователь укажет, что он закончил вводить (т. Е. когда он нажимает кнопку отправки).

Комментарии:

1. 1 за то, что разрешил использовать хэш на сервере, чтобы затруднить атаки методом перебора. В случае, если вы отправляете пароли только при нажатии кнопки отправки, вам не обязательно выполнять Ajax-запрос, вы можете просто (позволить браузеру) опубликовать форму.