Php 验证链接和管理nonce创建的规则

Php 验证链接和管理nonce创建的规则,php,cryptography,Php,Cryptography,我的意图是,当用户更新其电子邮件时,会发送一封验证电子邮件,其中包含验证链接,用户只需单击此链接即可验证电子邮件更新。这是web中的标准做法 验证链接将包含一个nonce,该nonce将与db中的一个进行交叉检查,如果两者相同,则表示已进行验证 我的问题与nonce的创建有关,以及我必须使用什么函数来创建它。 这是一个安全性不是最高优先级的时刻,我们这里不处理密码。 PHP函数uniqid()似乎是一个不错的选择,但我想在这里介绍一些关于这个问题的看法。 您使用什么函数为电子邮件验证链接创建no

我的意图是,当用户更新其电子邮件时,会发送一封验证电子邮件,其中包含验证链接,用户只需单击此链接即可验证电子邮件更新。这是web中的标准做法

验证链接将包含一个nonce,该nonce将与db中的一个进行交叉检查,如果两者相同,则表示已进行验证

我的问题与nonce的创建有关,以及我必须使用什么函数来创建它。 这是一个安全性不是最高优先级的时刻,我们这里不处理密码。 PHP函数uniqid()似乎是一个不错的选择,但我想在这里介绍一些关于这个问题的看法。 您使用什么函数为电子邮件验证链接创建nonce


我无法就此事做出决定,因为我可能不知道所有起作用的因素,以及哪些因素必须决定要做出的决定

如果其安全性不是很关键,那么带有
uniqid()
的SHA-1/2输出就足够了。确保链接在一段时间(例如24小时)后过期,以防止暴力攻击。如果应用程序的安全性更为关键,可能需要回答一个安全问题。按照现代标准,一个只存在很短时间的临时散列通常是足够安全的。我没有找到任何SHA1/2算法(除非你指的是我也没有找到的SHA2),只有SHA1。好的,我处理好了算法的事情。我怎么能让它在24小时后过期…我不希望你写出所需的全部代码…我只是需要一些指导,谢谢。我的意思是
SHA-1
SHA-2
(其中SHA-2通常被称为
SHA-512
SHA-256
。我假设您将临时链接存储在数据库中?在这种情况下,大多数数据库引擎都带有任务计划程序,您可以在其中周期性地执行SQL语句。您只需执行类似于从dbname where(now()删除*的操作-timestamp)>86400(在SQL语句中)。并让它每隔一小时左右执行一次。我最终使用了SHA1。在数据库中,我只存储nonce,而不存储整个链接…至于任务计划程序,我第一次听说它,我将研究它。谢谢