功能预览

功能介绍

表单被机器人灌水,验证码应该加在哪一层

表单被机器人灌水时,验证码应加在公开入口的提交那一层,而不是只加在登录页。留言、注册、搜索等能被外部直接提交的表单都要单独核一遍防护。验证码只处理是不是真人,提交之后的敏感词过滤、关键词替换与内容审核构成第二道防线,负责拦下已经通过校验的垃圾内容。

安全 表单防刷

功能介绍

表单被机器人灌水,验证码应该加在公开入口的提交那一层,而不是只加在登录页。判断口径很简单:凡是能被外部直接提交、且提交结果会进后台或上到页面的表单,都要单独核一遍防护,包括留言、联系我们、注册、评论,以及站内搜索框。验证码解决的是「是不是真人」,它拦不住真人提交的垃圾话,所以提交之后的敏感词过滤、关键词替换与内容审核要接上,才是完整的两道防线。

灌水从哪几个入口进来

后台出现大量重复留言,通常不是同一个入口。常见的四类:留言与联系我们表单、注册与找回密码表单、评论表单、以及把搜索参数原样回显的搜索页。前两类直接写数据,后两类还可能被用来试探页面注入。攻击脚本一般直接对着提交地址发请求,不经过页面渲染,所以只在前端 JavaScript 里做校验等于没做——把校验放在渲染层,脚本可以绕过。

验证码应该加在哪一层

正确的层是「提交动作发生之前,并且服务端会验证这个校验结果」。AnQiCMS 的表单可以接入 reCAPTCHA 验证码,留言等表单在提交环节做真人校验,服务端确认校验通过才写数据。落在哪一层有三个判断标准:

一是位置要贴着提交按钮,而不是只挡在登录页。灌水发生在留言页,验证码却只出现在后台登录页,等于没管。二是校验要在服务端完成。前端只判断有没有填,脚本照样能提交。三是不要挡真人路径。验证码只在需要证明是真人那一步出现,浏览页面、翻页、看文章不应该被要求答题,否则正常用户会被一并赶走。

提交之后的第二道防线

真人提交的垃圾、以及绕过校验的垃圾,要靠内容安全设置处理。敏感词过滤在写入环节生效,命中规则的提交会被拦下或标记;关键词替换用于把已经存在的表述批量改掉,适合处理规则口径变化后的历史内容。内容审核则在内容出现在页面之前再做一次人工或规则复核,把机器判断不了的边界情况收口。这三项配合,能显著减少人工逐条清理留言的量。

页面侧还有一层容易被忽略的防护:防采集干扰码。被批量采集的站点常会引来二次灌水,因为垃圾站可以直接复用你的内容结构。内置的 JWT 认证与对 SQL 注入、XSS 的防御,处理的是提交参数本身被构造攻击的情况,属于同一套安全设置里要一起打开的部分。

上线前要验的四种情形

第一,不带校验直接 POST 提交地址,是否被拒绝。第二,故意填错校验答案,是否给出明确失败而不是静默写入。第三,提交命中过滤规则的内容,后台是否有可追查的状态,而不是直接消失。第四,被误拦的正常留言能否恢复——删除正式文档是移入回收站而不是物理删除,误清的内容还有找回余地。

常见问题

验证码是不是越多层越好? 不是。真人路径上多一次答题就多一次流失,重点放在服务端校验与提交后的内容审核。

留言已经进后台了还算被灌吗? 算。进了后台但没上页面,问题在清理成本;上了页面才影响读者与搜索体验,所以要区分处理优先级。

只靠 IP 限流行不行? 不够。IP 会轮换,脚本会分布式提交,限流只能降低速度,不能判断提交内容是否垃圾。