防止机器人进行表单提交

rpa*_*pat 5 security

在我的网站上,我提供了一个供访问者输入的表单。无需登录。我不能要求登录。所以任何浏览网站的人都可以提交表单。它还向机器人打开了表单。我需要阻止机器人。我在以下线程上问过这个问题。

来自机器人的不需要的垃圾输入?

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

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

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

每次提交时,我还会删除陈旧的条目(用户未在规定时间内提交表单)。我需要有一些机制来阻止机器人对表单的请求。例如,如果我有来自特定主机的 n 个待处理请求,我会要求人们在几分钟后请求该表单。

这样的事情会起作用吗?

nec*_*cer 2

机器人将能够请求隐藏字段并无论如何提交。尝试使用非重新验证码库,这样您的用户就不会不知所措(重新验证码是压倒性的,因为它的额外目标是劫持您的用户对相当难以辨认的文本进行 OCR)。

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

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