根据客户要求将网站联系表单迁移到Google Form,我们之前实现了Google Form的定制化解决方案。
我在专栏中汇总发布,非常感谢许多人都在参考!感谢大家。
使用GoogleForm创建客户表单时的陷阱
GoogleForm自定义确认屏幕的实现
在这种情况下,我们收到了"大量垃圾邮件涌入,有应对措施吗?"的需求。
这次我们推出了 Google Form 专栏第三篇,总结了关于 Google Form 定制化的垃圾邮件防护措施。
首先想到的对策是,能否引入Google提供的免费安全服务reCAPTCHA?
但是,
Google 表单中不存在"启用 reCAPTCHA"这样的标准设置或开关。表单编辑界面中也没有这样的选项,这是正确的认识——这不是 Google 官方提供的功能。
据悉。进一步调查后发现,Google Form 的 reCAPTCHA 似乎是根据 Google 的判断来运作的,因此无法确定 reCAPTCHA 标记是否会出现!
首先,Google Form 的自定义涉及在 HTML 中输入 entry.386122698 这样的字段 ID,因此全部以明文形式显示。只要知道这个 URL 和 entry ID,即使不在浏览器中打开该页面,也可以从 curl 或 Python requests 这样的简单脚本直接向 formResponse 发送 POST 请求,这在技术上是可行的。
实际上,Google Forms 的大部分垃圾邮件似乎都遵循这种"绕过页面直接调用端点"的模式。即使加入 reCAPTCHA 也是如此。除非在 GAS 等服务器端执行令牌验证,否则令牌验证对直接 POST 的路径无效,无法根本解决问题。
但是,有解决方案!
实际上,许多垃圾邮件机器人采用通用类型,即"发现联系表单、自动填充并提交"(通过实际渲染页面并经由 DOM 提交的机器人)。
对于这种类型,通过 JavaScript 控制提交按钮是有一定效果的。如果要提高精度,建议结合使用多种方法。这些方法都只需修改 HTML 文件即可完成,Google 表单和 GAS 端完全不需要涉及。
参考:[reddit] 如何防止机器人对我的 Google 表单进行垃圾邮件发送并淹没我的邮箱?
1. 用 JavaScript 每次生成并显示随机数字的加法。
这是一个使用 Math.floor(Math.random()*9)+1 生成的简单计算式,随机产生两个数字的加法。通过 JavaScript,每当页面加载时都会随机生成类似"3 + 5 = ?"这样的数字组合并显示在屏幕上,然后保持提交按钮为 disabled 状态,直到用户输入正确答案为止。
虽然给用户带来了一些麻烦,但这样做有助于防止通用机器人不顾UI外观直接点击提交按钮的情况。
2. 通过蜜罐字段(隐藏输入框)进行自动判定
使用 CSS 将输入字段放置在屏幕外,使人眼无法看到。人类使用表单时不会触及此字段,但自动填充所有表单项然后提交的机器人类型会在这里输入值,因此如果在提交时此字段中存在值,提交将被取消。这是一种防御机制。
这类防护措施能有效对付"机械式地填完表单上所有输入字段(无论是否可见)后直接提交"的机器人。由于这类机器人数量众多,这种对策可以预期产生良好的防护效果。
由于每种机器人检测工具能识别的机器人类型不同,将两者结合使用可以减少漏检。
对于"不经过页面的直接 POST 型垃圾信息",继续不起作用这一点没有改变。
如果 Google Form 受到直接的垃圾邮件攻击而不是通过网站页面,最终还是得重新创建 Google Form 本身。
鉴于此,我认为将其作为"针对某些常见机器人的缓解措施"来引入应该是相当有效的!
我主要从事以标记语言为中心,使用JavaScript、React、Next.js进行前端开发的工作。当我参与的网站顺利发布时,我会感到很高兴!我的爱好是弹吉他。喜欢猫和烤红薯🐱🍠
Hiratch
前端工程师 / 2022年入职