防止机器人提交表单

时间:2011-03-10 04:01:36

标签: security

在我的网站上,我提供了一个供访问者输入的表单。无需登录。我不能要求登录。因此,浏览网站的任何人都可以提交表单。它还打开了机器人的形式。我需要防止机器人。我在下面的帖子中问了这个问题。

Unwanted garbage input from bots?

我确实得到了一些有用的回应。我读了几个解决方案(验证码和非验证码)。

我不是一个可以获得大量流量的网站。我的用户并不十分精通计算机。所以我想做这样的事情。我不是一个非常有成就的程序员,我在这里说的可能是非常愚蠢的。但我只是想学习,所以请耐心等待。

每次我提供表单时,我都会生成一个唯一的密钥(unix time + remote host IP)。我将密钥存储在db表中,然后发送表单,其中密钥是表单上的隐藏字段。提交表单时,我检查密钥的值是否在db表中。如果是,我从db表中删除密钥并处理表单。如果密钥不在db表中,我会丢弃表单并要求用户再次执行操作。

每次提交时,我也会删除过时的条目(用户未在规定的时间内提交表单)。我需要有一些机制,我可以从机器人中阻止对表单的请求。比如说,如果我有来自特定主机的n个待处理请求,我会要求人们在片刻之后请求表单。

这样的事情会起作用吗?

5 个答案:

答案 0 :(得分:1)

机器人将能够请求隐藏的字段并提交它。尝试一个非重新验证码库,这样你的用户就不会感到不知所措(由于其劫持你的用户进行非常难以理解的文本OCR的额外目标,重新获得了重击)。

但是,由于您要求使用非验证码解决方案,我建议您测量表单请求和表单提交之间的时间(使用隐藏密钥)。机器人会在几秒钟的时间内提交表格,但人类不会。

如果您发现这种简单的方法对您的网站不起作用,那么您可以尝试更复杂的方法。

答案 1 :(得分:1)

您也可以隐藏表单,然后用户必须单击按钮才能显示它。就像Twitter登录时的方式一样。

答案 2 :(得分:1)

我不会太担心提交表单的机器人。这不可能发生。如果你非常害怕,那么代替一个验证码就会问一个像“1 + 1是什么?”这样的愚蠢问题。在提交之前。

答案 3 :(得分:1)

这一切都取决于垃圾邮件发送者想要将垃圾提交给您的表单的绝望程度。你的方法适用于最愚蠢的机器人,但正如agks mehx所指出的那样,如果某人不愿花一分钟时间来调整他们的机器人,那么机器人加载表单并提取字段是微不足道的。

另一方面,你几乎没有办法自动停止“向某些国家的用户支付相当于10美分/小时的垃圾邮件,以便他们能找到的每个电路板上的垃圾邮件”的策略,而不会将事情锁定在某种程度上也阻止公众发布有用的评论。

答案 4 :(得分:0)

哈希表单字段名称怎么样,每次名称都不同?哈希(原始字段名称+时间戳+秘密盐)和刚刚传递时间戳的表单,机器人需要很长时间才能弄明白,特别是如果每​​个用户的盐不同并且每隔几小时更改一次/天。只是我的想法。想知道你是否认为它会阻止机器人?