将帐户批量加载到网站 - 通过电子邮件向用户发送密码 - 安全问题

Bulk load of accounts to website - email users the password - security issues

我有一个新的 Web 项目,用户可以在其中登录网站。我的客户(网站所有者)有一个现有客户的数据库,他们希望将这些数据库加载到新网站中。

所以,我在想,我会把现有的客户导入网站的数据库,分配一个随机密码,这对 1 次登录很好,然后必须更改,并将登录详细信息通过电子邮件发送给用户(带有密码纯文本)。

因此,鉴于电子邮件不安全,我必须假设它是在传输过程中被读取的。所以,假设我给爱丽丝发了一封电子邮件,我打算让她访问我的网站。让我们说:

A - 在 Alice 阅读电子邮件之前,Nasty Nick 阅读了它并登录到站点,并被迫更改密码。然后爱丽丝尝试登录,但密码无效。

B - Alice 阅读电子邮件,登录并设置新密码。 Nasty Nick 然后阅读电子邮件,尝试使用密码但失败了。

在案例 A 中,合法所有者被锁定并且(大概)会联系我的客户,我们可以采取行动。如果她不联系,Nick 将继续访问 - 但在帐户持有人输入数据之前,该帐户中没有任何信息或任何值。

在情况 B 中,除了 Nick 知道系统上存在特定用户名外,没有任何危害。

我的风险评估中是否遗漏了任何内容?显然我更希望人们自己注册,但我的客户想要利用现有的数据库。而且通过 post 发送登录详细信息太贵了。

还有其他批量导入的方法吗?

编辑

如果我不发送密码,而是发送 link/token 让用户登录,然后他们必须设置密码,类似于 what is suggested here 忘记密码系统 - 这样更好吗?

In case A, the rightful owner is locked out and will (presumably) contact my client

嗯,除非合法所有者不希望注册在线帐户,所以:

  • 不检查他们的邮箱,或者
  • 将邮件视为可能的垃圾邮件而忽略或丢弃,或者
  • 收不到邮件,因为地址错误或过时

通常要缓解这种情况,您会:

  • 对随机 password/token 设置时间限制,这样如果 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?

它在功能上没有区别,假设两者都使用相同的约束正确实现。但是,如果您可以为忘记密码和注册时验证电子邮件地址重复使用一些相同的代码,那么您需要审查的代码就会更少,因此更有可能使其安全(并且可能用户体验更一致)。

一路走来,只使用忘记密码系统可能是个好主意:不要设置初始密码,一开始只发送一封信息性电子邮件,instructing/linking 客户使用忘记密码功能以获取访问权限。