Javascript 如何避免滥用忘记密码表格

Javascript 如何避免滥用忘记密码表格,javascript,php,html,security,brute-force,Javascript,Php,Html,Security,Brute Force,问题: 我已经构建了一个HTML表单,首先检查表单中是否有电子邮件username@host.com然后,如果他们的电子邮件在数据库中,向他们发送一封带有临时密码的电子邮件,以便他们可以使用该临时密码登录并重置密码。 但我也不想阻止任何可能试图获取我网站上所有现有电子邮件列表的机器人,这取决于它们从网站获得的输出,例如“您的密码已重置…” 我见过一些网站这样做:如果你试图用一个错误的地址检索你的密码,那么(我想)在一段特定的时间内(比如说1小时)阻止他们的IP地址。我想知道是否有办法用PHP或j

问题:

我已经构建了一个HTML表单,首先检查表单中是否有电子邮件username@host.com然后,如果他们的电子邮件在数据库中,向他们发送一封带有临时密码的电子邮件,以便他们可以使用该临时密码登录并重置密码。 但我也不想阻止任何可能试图获取我网站上所有现有电子邮件列表的机器人,这取决于它们从网站获得的输出,例如“您的密码已重置…”

我见过一些网站这样做:如果你试图用一个错误的地址检索你的密码,那么(我想)在一段特定的时间内(比如说1小时)阻止他们的IP地址。我想知道是否有办法用PHP或javascript解决这个问题


如果有任何关于这个问题的例子,我会非常感谢。

您的数据库中需要一个表来保存数据

当有人填写表格时,将其记录在表格中。你需要他们的IP和时间

当他们填写表格时,找出他们在过去x分钟内尝试了多少次。如果它们大于x次尝试,请阻止窗体

机器人将使用代理,因此他们可以在几分钟内尝试1000个IP地址,尝试10000次

添加一个好的验证码是关键。你必须选择一张特定的图片,这是机器人无法通过的

按照这条路线,您可能希望设置一个cron作业来清除旧日志,这样您就不会有一百万条记录减慢您的站点。让它在午夜运行,并清除所有过去24小时或您认为最适合您的设置的时间范围内的旧日志

注意: 这是一个基线设置。您可以在表中存储所需的任何数据。您可以包括他们的用户代理。。但在最短时间内,您需要IP地址和他们尝试操作的日期时间。有了这些信息,您可以执行SQL查询,查看他们在过去的x分钟内尝试了多少次

您还可以使用会话和/或cookie。。然而,用户可以简单地删除cookie并摆脱会话,机器人也可以通过会话和cookie。所以实际上,最好的解决方案是将IP和时间存储在一个表中,并按照您认为合适的方式进行处理


如果你没有发布一些代码,我真的不能为你写一个。我们来这里是为了提供帮助,而不是为其他人编程。

我建议您在注册页面上添加验证码:

见-


验证码被广泛使用,尤其是最近发布的谷歌验证码消除了很多“麻烦”,因为大多数情况下,它只需要用户勾选一个复选框。

对于这种情况,有几种选择。正如一些人所说,你可以添加验证码,它不是100%万无一失,但它是一个很好的解决方案

从安全的角度来看,我不会向用户发送临时密码,而是向用户发送一个指向页面的链接,用户可以在该页面上自行更改密码。您需要生成一个一次性密钥,他们可以在更改密码之前在站点上输入该密钥,或者生成链接,使其包含一次性密码,并让您的应用程序获取该密码。
此外,无论您是采用一次性密码方法,还是向用户发送临时密码,请确保他们更改密码的时间有一个超时。您只需在数据库中的记录上设置一个时间戳,并在他们尝试输入代码/更改密码时进行检查

只需在您的页面中添加验证码。我正在寻找更专业且不像验证码那么烦人的内容。请他们输入帐户的电子邮件地址并记录他们的操作!并限制他们访问您的“忘记密码”页面(例如,在请求2-3次后禁止他们访问)@Leggendario仅添加任何验证码都不起作用。像xRumer这样的程序可以自动和内置解决许多验证码类型。其他人,将验证码发送给第三方,在第三方支付0.005美元的验证码。“向他们发送带有临时密码的电子邮件”-不要这样做。生成一个唯一的一次性密钥,以便他们可以重置自己的密码。还补充说,如果他们没有要求重置,只需在24小时后删除钥匙并忽略电子邮件即可。下次请求时,另一个密钥会自动删除。我喜欢这个想法。你有关于这件事的更多细节吗?例如,如何获取用户IP地址。我可以在以后实现recaptcha,我对如何使用PHP实现这一点很感兴趣。谢谢你的回复。如何获得一个人的IP已经在SO和互联网上讨论了很多次。这是一个相关的问题: