我想创建一个站点范围的哈希,用作创建密码检索令牌的salt.我一直在使用stackoverflow进行反复尝试,以了解最佳方法.
这是重置过程:
当用户请求密码重置电子邮件时,代码会生成检索令牌:
$token = hash_hmac('sha256', $reset_hash* , $site_hash)
Run Code Online (Sandbox Code Playgroud)
*$ reset_hash是使用phpass HashPassword()函数创建的哈希,保存在用户表中.
然后,我将URL中的令牌发送到用户的电子邮件地址.他们在令牌超时前一小时点击.我将他们的提交与服务器端生成的挑战令牌相匹配.如果匹配,则强制他们选择新密码,然后登录.
我想知道生成$ site_key的最佳方法.我正在考虑使用由随机数播种的另一个HMAC哈希:
$site_key = hash_hmac('sha256', MCRYPT_DEV_RANDOM, MCRYPT_DEV_RANDOM);
Run Code Online (Sandbox Code Playgroud)
这产生了这样的东西:
98bb403abbe62f5552f03494126a732c3be69b41401673b08cbfefa46d9e8999
Run Code Online (Sandbox Code Playgroud)
这是否适合用于此目的?我是在过度复杂,还是以错误的方式接近它?
编辑:我试图避免我的一些同事敦促的"秘密问题"步骤,所以我希望重置链接提供重置密码的单一步骤.因此,我担心的是,这个过程足够安全,可以保护包含敏感信息的系统.
已解决,现在:我将使用The Rook描述的nonce作为重置令牌.感谢大家的意见和反馈.