我有一个用户填写的网页表单,信息发送到服务器并存储在数据库中。我担心机器人可能会填写表格,我最终会得到一个充满无用记录的数据库。如何防止机器人填写表格?我想也许像Stackoverflow的机器人检测,如果它认为你是一个机器人,它会要求你验证你不是。 Perl,Java或PHP中是否有服务器端API?
答案 0 :(得分:10)
有几种解决方案。
使用验证码。据我所知,SO使用reCAPTCHA。
在表单中添加一个额外字段并使用CSS隐藏它(display:none)。普通用户不会看到此字段,因此不会填写该字段。如果此字段为空,请检查提交。如果没有,那么您正在处理一个仔细填写所有表单字段的机器人。这种技术通常被称为“蜜罐”。
添加JavaScript计时器功能。在页面加载时,它会从零开始一个值,然后随着时间的推移逐渐增加。普通用户会在一段时间内阅读并填写您的表单,然后才能提交。机器人会在收到表格后立即填写并提交表格。您在提交时检查值是否从零开始变大。如果有,那么它可能是真正的用户。如果您只看到几秒钟(或者由于机器人没有执行JavaScript而根本没有任何值)那么它很可能是一个机器人。但是,只有当您决定要求您的用户使用JavaScript才能执行“写入”操作时,这才会起作用。
还有其他技术可以肯定。但这些都非常简单有效。
答案 1 :(得分:5)
答案 2 :(得分:4)
我一直偏爱Honeypot验证码(article by phil haack),因为它对用户的侵害性较小。
答案 3 :(得分:3)
Captchas带来了可访问性问题,最终将被软件识别所击败。
我建议阅读这篇关于机器陷阱的short article,其中包括隐藏的领域,正如Matthew Vines和New in town所暗示的那样。
无论如何,你仍然可以同时使用验证码和僵尸陷阱。
答案 4 :(得分:2)
CAPTCHA很棒。您可以做的另一件事是阻止99%的机器人流量但不会惹恼您的用户是验证字段。
我的网站,我检查邮政编码和电话号码等字段中的文字。这已经消除了所有非目标机器人的错误信息。
答案 5 :(得分:0)
您可以创建一个两步系统,用户填写表单,但必须回复电子邮件,以便在一段时间内(例如24小时)“激活”记录。
在后端,您可以将它们放入临时表中,而不是使用所有表单提交填充当前表,而是自动删除比您的时间分配旧的任何行。除非你有一个严重的机器人问题,否则我认为表格不会那么大,特别是如果第一个表格只是几个字段。
这种方法的一个好处是,您不必使用验证码或其他可能会产生一些辅助功能问题的技术。