And*_*rew 7 authentication zend-framework forgot-password
我有一个使用的基本身份验证过程Zend_Auth_Adapter_DbTable.我在身份验证控制器上有登录和注销操作.现在我想通过自动生成密码,保存新密码以及向他们发送包含新生成密码的电子邮件来创建一个重置忘记密码的功能.
这样做的最佳流程是什么?我该如何生成新密码?Zend Framework是否有任何可以使这更容易的东西?
我还听说过发送一封电子邮件,其中包含一个短期页面的链接,可以让他们设置一个新密码.如何使用Zend Framework完成这项工作?
Bil*_*win 22
Zend Framework没有密码生成类.这是一篇关于如何使用PEAR模块Text_Password生成密码的文章:https://web.archive.org/web/1/http:
//blogs.techrepublic%2ecom%2ecom/howdoi/?p = 118
但是,在普通电子邮件中发送密码并不是一种好的安全措施.相反,您应该重置他们的帐户,以便他们可以在不提供密码的情况下临时登录(给定您在电子邮件中发送的URL过期),一旦他们登录,就要求他们将自己的密码更新为他们所知道的密码.然后存储他们密码的盐渍哈希.
这里有一些建议在Zend Framework中做到这一点:
AccountReset使用字段定义表:( reset_idGUID主键),account_id(引用Accounts.account_id)和expiration(时间戳).AccountController::resetAction(),即在用于创建帐户,登录,更改密码等的同一个控制器中.AccountReset表中插入一个新行,其中包含新GUID,对用户帐户的引用以及expiration将来30分钟左右的时间.<GUID >"(如果您对路由规则很聪明,可以缩短该URL,但保留GUID).AccountController::resetAction()收到请求时,它查找其reset_id在参数AccountReset表中.如果该GUID存在且expiration时间尚未过去,则向用户显示一个表单以更改其密码(无需对其进行身份验证并登录).resetAction()收到没有GUID的请求,或者数据库中不存在GUID,或者该行已经通过了该GUID expiration,则此操作可能会向用户显示一个按钮以启动新的重置请求,并发送一封包含新的GUID.记得让这个按钮成为POST请求!由于GUID仅通过电子邮件传递给该用户的地址,因此没有其他人可以获得更改密码的权限.即使用户的电子邮件被截获,GUID也只会在有限的时间内授予该访问权限.
如果您想要更加谨慎,可以记下AccountReset表中的客户端IP地址,并要求在30分钟的窗口内从具有相同IP地址的客户端更改密码.
这只是袖手旁观,我没有实施或评估它是否具有适当的安全性.如果您负责实施安全性,那么您有责任阅读安全问题.一个备受推崇的PHP安全资源是http://phpsecurity.org/.
| 归档时间: |
|
| 查看次数: |
10276 次 |
| 最近记录: |