我有一个新的网络项目,用户可以登录该网站。我的客户(网站所有者)拥有一个他们想要加载到新网站的现有客户数据库。
所以,我在考虑,我会将现有客户导入网站的数据库,分配一个随机密码,这对于1次登录是好的,然后必须更改,并将登录详细信息通过电子邮件发送给用户(用明文密码)。
因此,鉴于电子邮件不安全,我必须假设它已在传输中读取。所以,假设我发送了一封电子邮件,我打算访问我的网站。让我们说:
A - 在Alice阅读电子邮件之前,Nasty Nick读取并登录该网站,并被迫更改密码。 Alice然后尝试登录,但密码不起作用。
B - Alice读取电子邮件,登录并设置新密码。讨厌的尼克然后读取电子邮件,尝试使用密码,但它失败了。
在案例A中,合法所有者被锁定,并且(可能)与我的客户联系,我们可以采取行动。如果她没有联系,Nick会继续访问 - 但在帐户持有人输入数据之前,帐户中没有任何信息或任何值。
在案例B中,除了知道系统上存在特定用户名的尼克之外没有任何伤害。
我在那里的风险评估中遗漏了什么?显然,我希望人们自己注册,但我的客户希望利用现有的数据库。通过邮寄发送登录详细信息太昂贵了。
进行批量导入的其他方法吗?
修改
如果我发送了一个记录用户的链接/令牌,而不是发送密码,那么他们必须设置密码,类似于what is suggested here忘记密码系统 - 这样更好吗?
答案 0 :(得分:1)
在案例A中,合法所有者被锁定并且(可能)与我的客户联系
好吧,除非合法的所有者不希望注册在线帐户,否则:
通常为了缓解这种情况,你会:
B - Alice阅读电子邮件,登录并设置新密码。
还有爱丽丝阅读电子邮件,登录,分心或不感兴趣的角落情况,因此不会设置新密码。您应该尝试确保此时初始的“一次性”密码不可重复使用。
如果我发送一个记录用户的链接/令牌,而不是发送密码,那么他们必须设置密码,类似于此处建议的忘记密码系统 - 这样做会更好吗?
假设两者都使用相同的约束正确实现,它在功能上并不相同。但是,如果你可以重新使用一些相同的代码来忘记密码和验证电子邮件地址注册,那么你需要更少的代码来审查,从而更有可能使其安全(可能还有UX)更加一致)。
最好一直使用忘记密码系统:不要设置初始密码,一开始只发送信息性电子邮件,指示/链接客户使用忘记密码系统-password功能可以访问。