首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过邮件发送一次性密码

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

Stack Overflow用户
提问于 2016-09-02 10:26:44
回答 1查看 711关注 0票数 0

也许这对the Security SE来说是个更好的问题,但我认为这也不是一个好地方。

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

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

客户端希望通过电子邮件发送每个选举人(有时多达5000人)的用户名和密码。我不是超级粉丝,但这不是我的工作。电子邮件是通过SSL发送的,所以至少是这样的。

我在想,既然选民只需投票一次,我便可以在他们投票后立即取消他们的账目。使用相同的凭据再次登录将无法工作。此外,我可以每24小时更改他们的密码,并向尚未投票的选民发送一封新的电子邮件,其中附有更新的凭证。选举通常持续3-5天,因此这些更新的电子邮件会自动提醒人们投票。当选举结束时,所有相关帐户也将被停用。

这够安全吗?我读过很多文章,这些文章推动您使用一次URI和令牌,但是我的应用程序中创建的帐户只能登录一次,之后它们就会被停用。在我看来,有一次,用户创建新密码的表单URI对用户来说是个麻烦,因为用户只登录一次,然后永远忘记帐户。

注意:所有生成的密码在存储到数据库之前都要通过bcrypt()。该电子邮件是在生成密码之后发送的,这实际上是密码在纯文本中唯一可以查看的时候(尽管通过SSL查看该密码的价值)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-02 13:45:10

从您的描述中,我了解到您根本不需要用户帐户,否则您不会考虑立即删除帐户。而且选举似乎是匿名的,所以没有理由将选举与用户联系起来,对吗?

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

令牌必须足够强(至少20个字符a-zA-Z0-9),并且只应该将其散列存储在数据库中,但是如果令牌足够强,则可以使用像SHA-256这样的快速散列而不加盐,因此可以在数据库中搜索它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39290150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档