问题:
我已经构建了一个HTML表单,我首先检查该电子邮件是否为username@host.com形式,然后如果他们的电子邮件在数据库中,请向他们发送一封包含临时密码的电子邮件,以便他们可以使用该表单登录临时密码并重置密码。 但我也不想阻止任何可能试图获取我网站上所有现有电子邮件列表的机器人,具体取决于他们从网站获得的输出,例如“您的密码已重置 ...” 。
我看过一些网站会这样做:如果你试图用错误的地址检索你的密码,那么(我在想)阻止他们的IP地址一段特定的时间让我们说1小时。我想知道是否有办法用PHP或javascript解决这个问题。
如果有任何例子我可以解决这个问题会很棒。
答案 0 :(得分:1)
您需要数据库中的表来保存数据。
当有人填写表单时,请将其记录在表格中。你需要他们的IP和时间。
当他们填写表格时,请确定他们在过去x分钟内尝试了多少次。如果它们大于x次尝试,则阻止表单。
Bots将使用代理,因此他们可以在几分钟内尝试1,000次IP地址10,000次。
添加一个好的验证码将是关键。那些你必须选择特定图片的东西,机器人真的无法过去。
走这条路线,您需要设置一个cron作业来清除旧日志,这样您就不会有百万条记录减慢您的网站速度。让它在午夜时分运行,清除过去24小时内的所有旧日志或您认为最适合您设置的任何时间范围。
注意:强> 这是基线设置。您可以在表格中存储所需的任何数据。您可以包含他们的用户代理..但是在最低限度,您需要IP地址和他们尝试操作的日期时间。使用该信息,您可以执行SQL查询以查看他们在过去x分钟内尝试过多少次。
你也可以使用会话和/或cookie。但是,用户可以简单地删除cookie并摆脱会话,机器人也可以通过会话和cookie。实际上,最好的解决方案是将IP和时间存储在一个表中,并根据需要进行处理。
如果没有你发布一些代码,我真的无法为你写一个代码。我们在这里提供帮助,而不是为其他人做编程。
答案 1 :(得分:1)
我建议您在注册页面上添加验证码:
请参阅 - Google ReCaptcha
Captchas被广泛使用,特别是最近新发布的Google Captcha会带来很多烦恼"离开,因为它 - 大部分时间 - 只需要用户检查一个复选框。
答案 2 :(得分:0)
这种情况有几种选择。有几个人说你可以添加一个Captcha,它不是100%万无一失,但它是一个很好的解决方案。
从安全角度来看,我不会向用户发送临时密码,而是向用户发送指向他们可以自行更改密码的页面的链接。您需要在更改密码之前生成可以在网站上输入的一次性密钥,或者生成链接以使其包含一次性密码并让您的应用程序进行检索。 此外,无论您采用一次性密码方法,还是向用户发送临时密码,请确保他们必须更改密码的时间超时。您可以在数据库中的记录上设置时间戳,并在他们尝试输入代码/更改密码时进行检查