Bulk load of accounts to website - email users the password - security issues
我有一个新的Web项目,用户可以在其中登录到该站点。我的客户(站点的所有者)有一个现有客户的数据库,他们希望将其加载到新站点中。
所以,我想,我会把现有的客户导入网站的数据库,分配一个随机的密码,这对1个登录很好,然后必须更改,并通过电子邮件将登录详细信息发送给用户(密码为纯文本)。
因此,鉴于电子邮件不安全,我必须假设它是在传输过程中读取的。所以,假设我发送了一封电子邮件Alice,我打算访问我的网站。假设:
A-在Alice阅读电子邮件之前,讨厌的Nick会阅读它并登录到站点,然后被迫更改密码。Alice随后尝试登录,但密码不起作用。
爱丽丝读了电子邮件,登录并设置了一个新密码。讨厌的尼克接着读了电子邮件,试图使用密码,但失败了。
在案例A中,合法所有人被锁定,并(大概)联系我的客户,我们可以采取行动。如果她没有联系,尼克将继续拥有访问权限——但在账户持有人输入数据之前,账户中没有信息或任何价值。
在案例B中,除了Nick知道系统上存在特定的用户名之外,没有其他伤害。
我是否在风险评估中遗漏了什么?显然,我更希望人们自己注册,但我的客户希望利用现有的数据库。而且邮寄登录信息太贵了。
是否有其他方法进行批量导入?
编辑
如果不是发送密码,而是发送一个登录用户的链接/令牌,然后他们必须设置一个密码,类似于这里建议的忘记密码系统-这样更好吗?
In case A, the rightful owner is locked out and will (presumably) contact my client
号
好吧,除非合法所有人不希望注册到一个在线账户,所以:
- 不检查邮箱,或
- 忽略或丢弃可能是垃圾邮件的邮件,或
- 因为地址错误或过时而无法收到邮件
通常,为了缓解这种情况,您将:
- 时间限制随机密码/令牌,这样如果Nick在接下来的几个月内访问电子邮件帐户,他就无法进入该帐户而不会产生更多的电子邮件噪音;
- 理想情况下,只有在明确要求时才使用令牌发送邮件
B - Alice reads the email, logs in and sets a new password.
号
还有一个角落的案例,爱丽丝阅读电子邮件、登录、分心或不感兴趣,所以不设置新密码。您应该尝试确保初始的"一次性"密码此时不可用。
If, instead of sending the password, I send a link/token that logs the user in and then they must set a password, similar to what is suggested here for a forgot password system - is this better?
号
它在功能上没有区别,假设两者都是用相同的约束正确实现的。但是,如果您可以在注册时对忘记的密码和验证电子邮件地址重复使用一些相同的代码,那么您可以查看的代码更少,从而使其更安全(而且UX可能更一致)。
最好一直使用忘记的密码系统:不要设置初始密码,一开始只发送一封信息性电子邮件,指示/链接客户使用忘记的密码功能获取访问权限。