Вопрос по форме восстановления пароля на сайте
Это должен быть не хэш пароля, а случайный набор символов, который генерируется при нажатии «восстановить пароль» и у которого определенный срок годности.

Такая ссылка может попасть в history браузера и т.п. (помните про попадание в поисковики ссылок на заказы в инет-магазинах?)
Нужно запоминать в базе когда сгенерированна подобная ссылка, и придерживаться некого TTL для нее, мне доводилось анализировать как часто пользователи восстанавливают пароль (на примере интернет магазина), в 99% случаев происходит так: заходим на сайт, не помним пароль или логин, идем в форму восстановления, пишем там свой мэил, и тут же идем в почту ждать ссылку.

Т.е. при «сроки годности» такой ссылки скажем в 1 час, все должно без проблем работать, и не дать шанса сбрутфорсить хэш пароля.

Ну и само собой если пользователь не ткнулся на сайте в «восстановить пароль» то никакого TTL в базе не будет, а значит это защит от генерации подобных ссылок с парами почта\хэш пароля.