也许这对the Security SE来说是个更好的问题,但我认为这也不是一个好地方。
我正在开发一个网络应用程序来进行公司内部的在线选举。选民可以登录应用程序,投票给他们最喜欢的候选人,然后退出应用程序。
选举人都会被分配一个相当不可预测的用户名,至少有4个随机整数(由php的random_int()和一个完全不可预测的密码(由php的random_bytes() )。
客户端希望通过电子邮件发送每个选举人(有时多达5000人)的用户名和密码。我不是超级粉丝,但这不是我的工作。电子邮件是通过SSL发送的,所以至少是这样的。
我在想,既然选民只需投票一次,我便可以在他们投票后立即取消他们的账目。使用相同的凭据再次登录将无法工作。此外,我可以每24小时更改他们的密码,并向尚未投票的选民发送一封新的电子邮件,其中附有更新的凭证。选举通常持续3-5天,因此这些更新的电子邮件会自动提醒人们投票。当选举结束时,所有相关帐户也将被停用。
这够安全吗?我读过很多文章,这些文章推动您使用一次URI和令牌,但是我的应用程序中创建的帐户只能登录一次,之后它们就会被停用。在我看来,有一次,用户创建新密码的表单URI对用户来说是个麻烦,因为用户只登录一次,然后永远忘记帐户。
注意:所有生成的密码在存储到数据库之前都要通过bcrypt()。该电子邮件是在生成密码之后发送的,这实际上是密码在纯文本中唯一可以查看的时候(尽管通过SSL查看该密码的价值)。
发布于 2016-09-02 13:45:10
从您的描述中,我了解到您根本不需要用户帐户,否则您不会考虑立即删除帐户。而且选举似乎是匿名的,所以没有理由将选举与用户联系起来,对吗?
如果以上所述是正确的,您可以简单地将电子邮件地址与随机令牌一起存储.令牌可以作为URL的一部分发送给用户。当用户单击该链接时,您可以检查此令牌是否存在,并且在完成选举后,您可以删除电子邮件/令牌。这将不需要用户名或密码。
令牌必须足够强(至少20个字符a-zA-Z0-9),并且只应该将其散列存储在数据库中,但是如果令牌足够强,则可以使用像SHA-256这样的快速散列而不加盐,因此可以在数据库中搜索它。
https://stackoverflow.com/questions/39290150
复制相似问题