【问题标题】:How to stop bots from submitting web forms如何阻止机器人提交 Web 表单
【发布时间】:2015-04-21 18:12:21
【问题描述】:

我正在制作一个需要用户注册并登录的网站。我的朋友一直在用mechanize 制作机器人。该机器人多次注册该网站。当机器人产生大量用户时,用户会被添加到数据库表中。

我已经制作了一个程序来停止其中包含示例的条目,因为机器人只有一个变量,例如:

name = 0

并不断在 name 变量上加 1。

我认为他有一个这样的while循环:

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 中制作了计时器,但它们都失败了。

我考虑过验证码,但机器人仍然可以发送私人消息,如果用户每次想给朋友发消息时都必须填写验证码,我认为用户不会留在网站上。而且我不想在注册表单上有验证码,因为它看起来不吸引人。

我想尽办法阻止这一切。它已经持续了几个月,它确实减慢了网站的开发速度,因为我必须不断检查我的程序可能遗漏的任何条目。

有谁知道阻止机器人的任何其他方法。

【问题讨论】:

  • 您是想保护您的网站免受一般机器人的攻击,还是仅仅保护您朋友的机器人?如果是后者,肯定有更简单的方法....
  • 我的朋友似乎已经想到了各种办法。
  • 您将通过一个简单的隐藏输入阻止 99% 的机器人,而机器人不会知道它是隐藏的,但仍会尝试填写。
  • 我的朋友通过 Firefox 上的查看源代码选项查看 html。他会不会看到源中有一个在网页上不可见的字段。
  • 如果有简单的方法,他们就不必发明验证码了。

标签: javascript php python mechanize


【解决方案1】:

Google 发布了他们的新“reCAPTHA”技术,只需选中一个框即可。机器人可以解决这个问题,但要做到这一点非常困难。通过使用它,您可以降低朋友机器人的风险。据我所知,Mechanize 目前没有办法解决这个问题。

【讨论】:

  • 太棒了,从 1 到 10 分,解决这个问题有多难?
  • 我会说 8 左右。我只知道一个可以绕过它的程序,但它需要付出很多努力,而且每年要花费很多钱。正如有人已经说过的那样,除了这个“朋友”之外,任何人都不太可能花费任何时间来入侵您的网站。
【解决方案2】:

在注册时添加电子邮件确认,以及在您的应用程序或持久层中的唯一电子邮件地址限制。

将此与 adeneo 使用隐藏字段的建议相结合,您将减少机器人注册。注意,每次可以使用唯一的字段名+值,这样更难攻击。

请注意,目前给出的许多建议都是为了阻止通用攻击。通过评估网站的弱点来对付专门攻击您网站的人是完全不同的事情。

【讨论】:

  • 我的朋友说有一种方法可以阻止他的机器人,但他不知道如何解决。他不会告诉我那是什么。我开始认为他在这件事上撒了谎。你怎么看?
  • 您可以采取各种方法,但您通常必须权衡收益与影响。例如,更严格的登录要求,例如下面建议的 IP 检查,或一段时间内的登录次数可能会影响某些用户(如果您是热门网站,IP 检查可能会影响大公司的学生或员工)。
  • 听起来你的朋友也不是真正的朋友。做聪明的事并在注册时强制执行电子邮件确认。
  • 电子邮件确认并不难规避。像 Gmail 这样的电子邮件提供商使用(并且可能仍然)将数字等放在您的电子邮件地址的末尾,并且仍然可以到达正确的邮箱。目的是让您可以使用这些地址在 Gmail 中创建过滤器,但最终仍将其全部保存在 1 个帐户中。我认为 Gmail 在这种做法中并不孤单。写一些东西来消除某些提供商允许您显示您的电子邮件地址的所有可能方式对我来说听起来像是一场噩梦。
  • 实际上有很多免费的自动注册电子邮件服务,所以如果您使用电子邮件确认路线,您还需要维护一个黑名单/白名单。
【解决方案3】:

对我来说最简单的解决方案似乎是通过 Facebook 等第三方实现登录,并且根本不提供标准登录表单。

或者,您可以实施一个系统来存储用户创建帐户时的 IP 地址以及计数器,如果在特定时间段内从该 IP 地址创建的帐户数量超过一定数量,则采取纠正措施,例如暂停这些帐户。

我有一种感觉,也可以使用fail2ban 创建一个自定义过滤器来完成这项工作 - 这样,如果用户在某个时间段内尝试注册太多次,他们可能会因给定而被阻止时间长度。

【讨论】:

  • 是的,但我不确定用户是否同意我存储他们的 IP 地址。当我设身处地为一般电脑用户设身处地时,他们可能会认为我在试图破解他们或类似的东西。
  • 到底是什么让你这么想?相反,IP 地址通常被存储以维持会话。许多 MVC 框架会在其会话系统中使用它们,并记录在 Web 服务器日志中。
  • 是的,没有。对不起罗吉。这不是你需要担心的事情。破解需要的不仅仅是 IP。
  • 真正的 phix,但我只是在想没有计算机知识的人会怎么想。我是否必须弹出一个窗口(例如告诉您在网站上使用 cookie 的窗口)来告诉他们正在存储 IP 地址?
  • 您不必将 IP 链接到用户即可使用它来限制新注册。只是一个在列表中带有时间戳的 IP。任何超过 24 小时的 IP 条目都会被删除。计算过去 24 小时内该 IP 注册新帐户的次数。超过门槛,让他们等待。在它下面,让他们注册。每个人都存储您的 IP。如果他没有使用多个代理,那么您可能会使用您的 htaccess 文件专门阻止他的 IP,这样您就不会占用任何服务于他的机器人页面的服务器资源。
猜你喜欢
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 2021-10-02
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多