我有一个网络表单,用户填写该表单并将信息发送到服务器并存储在数据库中。我担心机器人可能只是填写表格,而我最终会得到一个充满无用记录的数据库。如何防止机器人填写我的表格?我在想也许类似于 Stackoverflow 的机器人检测,如果它认为你是机器人,它会要求你验证你不是。是否有 Perl、Java 或 PHP 语言的服务器端 API?

有帮助吗?

解决方案

有几种解决方案。

  1. 使用验证码。SO用途 验证码 据我所知。

  2. 在表单中添加一个额外的字段并使用 CSS 隐藏它(display:none)。普通用户不会看到此字段,因此不会填写它。您在提交时检查该字段是否为空。如果没有,那么您面对的机器人已经仔细填写了所有表单字段。这种技术通常被称为“蜜罐”。

  3. 添加 JavaScript 计时器功能。在页面加载时,它的初始值为零,然后随着时间的推移而增加。普通用户会阅读并填写您的表单一段时间,然后才提交。机器人收到表格后会立即填写并提交。您检查提交时该值是否与零相差很大。如果有,那么它可能是真正的用户。如果您只看到几秒钟(或者由于机器人不执行 JavaScript 而根本看不到任何值),那么它很可能是一个机器人。然而,只有当您决定要求用户打开 JavaScript 才能执行“写入”操作时,这才有效。

当然还有其他技术。但这些都是非常简单有效的。

其他提示

您可以使用 验证码 (与 stackoverflow 相同) - 他们有 图书馆 适用于多种编程语言。

验证码带来了可访问性问题,最终会被软件识别打败。

我推荐阅读这篇文章 短文 关于机器人陷阱,其中包括隐藏字段,正如 Matthew Vines 和 New intown 已经建议的那样。

无论如何,您仍然可以自由使用验证码和机器人陷阱。

CAPTCHA是很大的。你可以做其他的事情,以防止你的机器人的流量99%,但不惹恼你的用户是验证领域。

我的网站,我检查的文字像邮政编码和电话号码字段。这消除了所有非靶向机器人误传的。

您可以创建一个两步系统,其中用户填写表单,但随后必须回复电子邮件“激活”设定的时间期限内记录 - 说24小时。

在后端,而不是所有的表单提交填充当前表,你可以把它们放入一个临时表中自动删除任何行比你的时间分配更旧。除非你有一个严重的机器人问题,那么我会认为该表不会得到那么大,尤其是如果第一种形式是只有几个领域。

这种方法的benifit是,你不必使用验证码或一些其他技术一样,可能会产生一些可访问性问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top