我有一个用户填写的Web表单,信息发送到服务器并存储在数据库中.我担心机器人可能会填写表格,我最终会得到一个充满无用记录的数据库.如何防止机器人填写表格?我想也许像Stackoverflow的机器人检测,如果它认为你是一个机器人,它会要求你验证你不是.Perl,Java或PHP中是否有服务器端API?
有几种解决方案.
使用验证码.据我所知,SO使用reCAPTCHA.
在表单中添加一个额外的字段并用CSS隐藏它(display:none).普通用户不会看到此字段,因此不会填写该字段.如果此字段为空,请检查提交.如果没有,那么您正在处理一个仔细填写所有表单字段的机器人.这种技术通常被称为"蜜罐".
添加JavaScript计时器功能.在页面加载时,它会从零开始一个值,然后随着时间的推移逐渐增加.普通用户会在一段时间内阅读并填写您的表单,然后才能提交.机器人会在收到表格后立即填写并提交表格.您在提交时检查值是否从零开始变大.如果有,那么它可能是真正的用户.如果您只看到几秒钟(或者由于机器人没有执行JavaScript而根本没有任何值)那么它很可能是一个机器人.但是,只有在您决定要求用户使用JavaScript才能执行"写入"操作时,这才会起作用.
还有其他技术可以肯定.但这些都非常简单有效.
您可以使用reCAPTCHA(与stackoverflow相同) - 它们具有许多编程语言的库.