【问题标题】:How can I prevent automatic form submission by bots?如何防止机器人自动提交表单?
【发布时间】:2025-03-26 21:50:01
【问题描述】:

我正在运行 ColdFusion MX,因此在提交表单之前,我无法在我的应用程序中使用内置的 cfimage Captcha functionality

但问题是没有验证码,机器人会提交表单。

防止自动提交的最佳方法是什么?

【问题讨论】:

  • 为什么不能使用验证码?你用的是什么编程语言?
  • 从 Coldfusion 8 开始,它支持验证码。
  • 在 ColdFusion 8 之前,还有 lylaCaptcha、cfformprotect 和其他各种选项 - CF 并没有被抛在后面。
  • 公平地说,OP 使用的 CF 版本在 CAPTCHA 一词出现之前就已经开始开发,并且在 8 多年前发布...
  • 大卫,阻止机器人提交 Web 表单是服务器端编程 - CFML、PHP、ASP.NET、Python、Ruby 等都有内置或社区提供的解决方案 - 正在发生什么在这里问绝对是一个 SO 问题,而不是 SF 问题。

标签: coldfusion captcha coldfusion-6


【解决方案1】:

验证码不一定是图片!

尝试以下解决方案之一:

  • 大多数机器人不理解 CSS。创建两个提交按钮,第一个带有将被服务器拒绝的值,第二个带有将被服务器接受的值。使用 CSS 隐藏第一个。
  • 让用户回答一个简单的数学问题。这将要求您创建数学问题并将预期的解决方案存储在某处(如用户的会话),然后将用户提交的答案与存储的答案进行比较。为了获得额外的保护,您可以创建简单的加法、减法和乘法问题。避免除法,余数对某些用户来说很痛苦。
  • 机器人读取表单元素的名称,并倾向于忽略文本标签。尝试创建一个名为“optout”的复选框(如时事通讯),默认选中。在复选框旁边,要求用户取消选中该复选框(如果他们是人类)。相反的技术也有效(您要求用户选中的未选中复选框)。

所有这些解决方案都可以在没有第三方代码或 API 调用的情况下完成。

话虽如此,reCAPTCHA 非常好,而且很容易集成到几乎任何环境中。

【讨论】:

  • 虽然不合常规,但我喜欢你提供的 CSS 解决方案。
  • 两个提交按钮最终可能会让用户通过按 Enter/Return 键提交表单,因为浏览器可能会使用(隐藏的)第一个提交值。类似地,例如 URL 的 CSS 隐藏表单字段将由机器人填写,但它也可能由表单自动完成填写。
【解决方案2】:

看看cfformprotect - 它适用于 CFMX 6 和所有更高版本的引擎。

它旨在通过各种方法阻止机器人和垃圾邮件发送者,使其完全可访问 - 并且对大多数用户不可见。

您可能还想查看与 CFMX 7 兼容的 CF wrapper for reCaptcha

【讨论】:

    【解决方案3】:

    我使用的另一种技术是使用图像按钮。您的 POST 处理程序获取单击图像的 x,y 坐标。我发现机器人(它们只是生成帖子请求)正在传递 0,0,并且通过将这些请求放在地板上,我将垃圾邮件帖子减少到低于真实帖子。抱歉,我不知道如何在 CF 中执行此操作,但我希望该技术对您有用。

    【讨论】:

      【解决方案4】:

      无论您使用哪种解决方案,在处理之前在服务器端进行数据验证总是一个好主意。

      这篇文章可能会有所帮助:http://www.bennadel.com/blog/405-Fully-Accessible-Spam-Form-Submission-Blocking-Using-ColdFusion-And-X-HTML-Version-III-.htm

      【讨论】:

        【解决方案5】:

        使用计算方法怎么样?就像 8 + 5 = ?

        使用 ColdFusion.Ajax.submitForm 怎么样?

        【讨论】: