如何防止机器人提交网页表单

0 投票
3 回答
1316 浏览
提问于 2025-04-29 19:31

我正在制作一个需要用户注册和登录的网站。我的朋友一直在用mechanize制作机器人。这个机器人会多次注册这个网站。当机器人创建了很多用户后,这些用户就会被添加到一个数据库表里。

我写了一个程序来阻止包含“example”这个词的注册,因为这个机器人只是在用一个变量,比如:

name = 0

然后不断地给这个名字变量加1。

我想他大概有一个这样的循环:

import mechanize
br = mechanize.Browser()
br.open("http://www.example.com/")
br.set_handle_robots(False) # Ignores the robots.txt file

name = 0
person = 'example',name

while True:
    br.select_form( 'signup' )
    br.form[ 'fullname' ] = person
    br.submit()
    name = name + 1

所以他基本上是让这个程序不停地运行,直到程序崩溃。

我想用javascript或php来阻止这个情况。

我找过解决办法,但我尝试的所有方法都失败了。我试着做了一个计时器,看看用户在页面上待了多久,因为机器人在网页上的停留时间大约只有一秒。我用php和javascript都做了这个计时器,但都没有成功。

我考虑过使用验证码,但机器人仍然可以发送私信,我觉得如果用户每次想给朋友发消息都要填验证码,他们可能就不愿意留在网站上。而且我不想在注册表单上加验证码,因为那样看起来不太吸引人。

我已经没有其他主意来阻止这个了。这种情况已经持续了几个月,真的拖慢了网站的开发,因为我得不断检查我的程序可能遗漏的注册。

有没有人知道其他方法可以阻止机器人?

相关文章:

  • 暂无相关问题
暂无标签

3 个回答

1

在用户注册时添加邮箱确认功能,同时确保每个邮箱地址都是唯一的,这样可以提高你应用程序的安全性。

如果再结合adeneo的建议,使用一个隐藏字段,这样可以减少机器人的注册。值得注意的是,你可以每次使用不同的字段名称和字段值,这样会让攻击者更难以入侵。

需要注意的是,之前提到的很多建议都是为了防止一些常见的攻击。而如果有人专门针对你的网站进行攻击,评估它的弱点,那就完全是另一回事了。

1

对我来说,最简单的解决办法就是使用第三方登录,比如用Facebook登录,而完全不提供传统的登录表单。

另外,你也可以建立一个系统,在用户创建账户时记录他们的IP地址,并设置一个计数器。如果在一定时间内,从同一个IP地址创建的账户超过了某个数量,就可以采取措施,比如暂停这些账户。

我觉得也有可能使用fail2ban创建一个自定义的过滤器来解决这个问题。这样,如果用户在某段时间内尝试注册太多次,就可以暂时阻止他们。

1

谷歌推出了他们的新技术“reCAPTCHA”,只需要勾选一个框就可以了。虽然一些机器人可以绕过这个检查,但这样做非常困难。使用这个技术可以降低你朋友的机器人带来的风险。根据我所知道的,Mechanize目前没有办法绕过这个检查。

撰写回答