根据客户要求将网站的联系表单替换为 Google Form,我们之前实现的 Google Form 自定义功能。
我们在专栏中汇总发布了这些内容,很高兴有很多人在参考!谢谢大家。
使用 Google Form 创建客户表单时的常见陷阱
Google Form 自定义确认屏幕的实现
在这种情况下,我们收到了一个请求:有没有办法应对大量垃圾邮件?
这一次,我们总结了 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 Form 的大多数垃圾信息似乎都来自这种"绕过页面直接调用端点"的模式。即使加入 reCAPTCHA,情况也是如此,除非在 GAS 等服务器端进行令牌验证,否则无法阻止直接 POST 请求,也就无法从根本上解决问题。
但是,还是有办法的!
实际上,许多垃圾邮件机器人都采用通用的「查找并自动填充联系表单再提交」这种类型(通过实际渲染页面并通过 DOM 提交的机器人)。
对于这类机器人,使用 JS 控制提交按钮是有一定效果的。要提高精度,建议结合多种方法。这些方法都只需修改 HTML 文件,无需触及 Google 表单端和 GAS 端。
参考:[reddit] 我如何防止机器人骚扰我的 Google Form 并淹没我的电子邮件?
1. 使用 JS 每次随机生成两个数字的加法运算。
使用 Math.floor(Math.random()*9)+1 随机生成两个数字的简单计算式。通过 JS 在每次页面加载时随机生成例如「3 + 5 = ?」这样的数字,显示在屏幕上,用户必须输入正确答案才能启用提交按钮的机制。
这对用户来说会增加一些麻烦,但很容易被那些不响应 UI 视觉反馈、直接尝试按下提交按钮的通用机器人触发。
2. 使用蜜罐字段(隐形输入框)进行自动判定
通过 CSS 将一个输入字段放在屏幕外,肉眼看不见。人类用户不会接触这个字段,但那种机械式地填充表单上所有字段然后提交的机器人会在这里也输入值,因此在提交时如果检测到这个字段有值,就会取消提交的机制。
这对「机械式填充表单中所有输入字段(无论是否可见)然后提交」这类机器人有效。这类机器人非常普遍,因此作为防对策很有期待值。
由于各自能检测到的机器人类型不同,将两者结合使用能减少遗漏。
对于"不经过页面直接POST型的垃圾信息",继续保持对其不产生作用的现状不变。
如果 Google Form 绕过网站页面而遭到直接垃圾邮件攻击,最终必须重新创建 Google Form 本身。
考虑到这一点,作为"针对某些常见机器人的缓解措施"来实施的话,应该相当有效吧!
我主要从事以标记语言为中心,使用JavaScript、React、Next.js进行前端开发的工作。当我参与的网站顺利发布时,我会感到很高兴!我的爱好是弹吉他。喜欢猫和烤红薯🐱🍠
Hiratch
前端工程师 / 2022年入职