如何应对注册表单攻击?

How to deal with an attack on registration-form?

关于注册过程的问题

我正在考虑电子邮件验证,并且正在玩一些应用程序。 如果

-) 攻击者编写一个脚本,用不同的随机电子邮件地址注册数百万个帐户(所有现有的,人们的电子邮件)然后当人们注册时,它会提示数据库中已存在电子邮件?

-) 或者更简单,如果用户使用其他人的电子邮件地址注册怎么办?注册 Ajax 会触发在数据库中为用户 table 创建用户 ID 和信息,但未完成验证。

但是,当 "real" 用户使用电子邮件注册时,电子邮件已经被占用...?因为数据库中不能同时存在 2 个电子邮件地址(作为脚本将无法区分用户....

首先,您应该尝试检测是否同一IP在短时间内向您发送了多个注册请求并将其列入黑名单(至少一段时间)。

其次,即使发送了验证电子邮件 - 您可以做很多事情来避免 "duplicate registration" 问题,这里有几个例子:

  1. 运行 每天一次清理工作 - 删除超过 24 小时未验证其帐户(通过电子邮件)的用户的所有条目
  2. 在用户验证 his/her 注册之前不要创建用户帐户(例如,您可以在另一个 table: UNVERIFIED_USERS 中创建一个条目)。通过这样做 - 您确保在发生此类攻击时减少现有用户的延迟 - 因为 USERS table 不会被修改。
  3. 如果用户尝试注册并且 he/she 已经 "has an account" 您应该允许用户通过发送另一封带有 link 的验证电子邮件来重置密码。
  4. 您可以使用 captcha in the registration form - to prevent such attacks. Today there are smart bots that can by-pass captcha, so you can also look for captcha-alternatives
  5. 等解决方案