Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过邮件发送一次性密码_Php_Email_Passwords - Fatal编程技术网

Php 通过邮件发送一次性密码

Php 通过邮件发送一次性密码,php,email,passwords,Php,Email,Passwords,也许这是一个更好的问题,但我想这也不是一个坏地方 我正在开发一个网络应用程序,在公司内部举行在线选举。选民可以登录该应用程序,投票选出他们最喜欢的候选人,然后退出该应用程序 选民都会被分配一个相当不可预测的用户名,其中至少有4个随机整数(通过php的random_int()和一个完全不可预测的密码(通过php的random_bytes()) 客户希望通过电子邮件发送每个选民(有时多达5000人)的用户名和密码。我不是一个超级粉丝,但这对我来说是个问题,否则就没有工作。电子邮件是通过SSL发送的,

也许这是一个更好的问题,但我想这也不是一个坏地方

我正在开发一个网络应用程序,在公司内部举行在线选举。选民可以登录该应用程序,投票选出他们最喜欢的候选人,然后退出该应用程序

选民都会被分配一个相当不可预测的用户名,其中至少有4个随机整数(通过php的
random_int()
和一个完全不可预测的密码(通过php的
random_bytes()

客户希望通过电子邮件发送每个选民(有时多达5000人)的用户名和密码。我不是一个超级粉丝,但这对我来说是个问题,否则就没有工作。电子邮件是通过SSL发送的,所以至少这是个问题

我在想,由于选民只需投票一次,我可以在他们投票后立即停用他们的帐户。使用相同的凭据再次登录将不起作用。此外,我可以每24小时更改他们的密码,并向尚未投票的选民发送一封新的电子邮件,其中包含更新的凭据。ele选举通常持续3-5天,因此这些更新的电子邮件将自动作为投票的提醒。选举结束时,所有相关帐户也将停用

这足够安全吗?我读过很多文章,这些文章促使你使用带有令牌的一次性URI,但是在我的应用程序中创建的帐户只能登录一次,之后它们就会被停用。在我看来,带有表单的一次性URI对于用户来说是一件麻烦事,因为他只会登录一次,然后永远放弃让我们来谈谈账目


注意:所有生成的密码在存储到数据库之前都会通过
bcrypt()
。在生成密码之后会立即发送电子邮件,而这实际上是唯一可以以纯文本形式查看密码的时间(尽管是通过SSL,但这是值得的).

根据您的描述,我知道您根本不需要用户帐户,否则您不会考虑立即删除该帐户。而且该选择似乎是匿名的,因此没有理由将该选择链接到用户,对吗

如果上述内容正确,您可以简单地将电子邮件地址与随机令牌一起存储。令牌可以作为URL的一部分发送给用户。当用户单击链接时,您可以检查此令牌是否存在,完成选择后,您可以删除电子邮件/令牌。这不需要用户名或密码


令牌必须足够强(至少20个字符a-z a-z 0-9)而且只有它的散列应该存储在数据库中,尽管如果令牌足够强大,您可以使用像SHA-256这样的快速散列,而不需要盐渍,因此您可以在数据库中搜索它。

从您的描述中,我知道您根本不需要用户帐户,否则您不会考虑立即删除该帐户。还有选择似乎是匿名的,所以没有理由将选举链接到用户,对吗

如果上述内容正确,您可以简单地将电子邮件地址与随机令牌一起存储。令牌可以作为URL的一部分发送给用户。当用户单击链接时,您可以检查此令牌是否存在,完成选择后,您可以删除电子邮件/令牌。这不需要用户名或密码


令牌必须足够强(至少20个字符a-z a-z 0-9)数据库中应该只存储它的散列,不过如果令牌足够强大,您可以使用像SHA-256这样的快速散列,而无需添加盐分,这样您就可以在数据库中搜索它。

如果您发送一个带有令牌的唯一URL,为什么他们需要一个表单来创建密码?正如您所说,他们不会以s身份重复登录到完整的用户帐户uch,他们只允许执行一次性操作,然后帐户被锁定。那么,你不能只通过电子邮件发送URL,在他们投票后,使URL过期吗?使用一些唯一标识符(如用户ID和随机标记)为URL生成令牌,通过强哈希算法(如bcrypt)运行它。我还需要发送用户名吗密码和URL一起?这个软件包看起来很适合这份工作不,你不需要用户名或密码。只需要一个唯一的、安全的散列,它存储在用户记录中。如果你发送一个带有令牌的唯一URL,为什么他们需要一个表单来创建密码?正如你所说,他们不会重复登录到完整的用户帐户,不是吗他们只允许执行一次性操作,然后帐户就被锁定了。那么,你就不能通过电子邮件发送URL并在他们投票后使URL过期吗?使用一些唯一标识符(如用户ID)和一些随机的东西为URL生成令牌,通过强哈希算法(如bcrypt)运行它。我还需要发送用户名和pa吗ssword和那个URL一起吗?这个包看起来很适合这份工作不,你不需要用户名或密码。只需要一个唯一的、安全的散列,它存储在用户记录中。嗯,选民记录实际上不一定要与用户记录相链接。只要选民记录与选举相链接,一切都很好。这可能真的是一个惊人的解决方案,谢谢!@Loek这正是我所指的。嗯,选民记录实际上不一定要与用户记录相链接。只要选民记录与选举相链接,一切都很好。这可能真的是一个惊人的解决方案,谢谢!@Loek这正是我所做的暗指。