Смена пароля реализована стандартным образом:
На странице-обработчике определенной заведомо функцией сверяются введенный из post-запроса пароль и хеш из базы данных для текущего пользователя (считаем в рамках вопроса, что id подделать нельзя, поскольку в противном случае профиль пользователя уже можно считать взломанным).
В случае, если проверка прошла успешно, определенной заведомо функцией вычисляется хеш нового пароля и руками (обычным запросом) заносится в БД для текущего пользователя.
Какие тут могут быть подводные камни, если считать, что в качестве пароля со стороны пользователя может прийти какое угодно чудо-юдо?
Например, известно, при загрузке файла на сайт желательно со стороны php-кода провести следующие профилактические проверки:
- Проверка на домен, с которого происходит загрузка файла;
- Проверка на сессию пользователя;
- Главное: проверка на расширение файла (получаем с помощью getimagesize) и принудительное присвоение нужного расширения;
- Важное: присвоение рандомного имени;
- etc.
Существует ли аналогичный маст-хэв для смены пароля пользователя при такой постановке вопроса? Ведь по идее новый пароль, каким бы он ни был, пройдет через хеш-функцию и станет обычной строкой.