前言

企业网站的留言表单本是“商机入口”,却被大量爬虫发送的垃圾留言占据,正常询价信息被淹没,处理起来费时又费力。今天分享给大家分享一个访客无感却能有效控制垃圾留言的方法。

一、垃圾留言从哪来?

这些烦人的垃圾留言,大多是不良爬虫自动发送的——爬虫爬取网页后,识别出表单功能,就直接往表单提交地址发送数据,全程都不用打开浏览器,瞬间就能发送大量垃圾信息。

二、解决思路

个人网站对付垃圾留言,常用reCaptcha验证码、Akismet插件,甚至第三方评论工具,但企业网站的表单不一样——它是客户询价的“关键通道”,稍有不慎就会流失商机:

  • 加验证码?会增加客户操作步骤,可能“劝退”潜在客户;
  • 关键词屏蔽?怕误伤正常留言(比如“推广”可能是客户咨询产品推广需求);
  • 留言评级插件?咨询量本就不多,漏判一条就可能错失商机。

那么正常用户与爬虫处理网页的方式有什么不同呢?具体差异在于:

  • 浏览器:打开表单页面后,会加载HTML、图片、视频等所有资源,还会保存页面设置的Cookie,提交表单时会带着Cookie一起发送;
  • 爬虫:只爬取HTML代码,不会加载其他资源,也不会保存和携带Cookie。

基于这个差异,我们可以设计一个“隐形门槛”:让表单处理程序只接收“带Cookie的请求”——正常的浏览器访客自然能通过,爬虫因为没有Cookie,提交会被直接拦截,而且整个过程访客完全感受不到。

三、参考示例

这个方法的核心是“给浏览器发Cookie→验证Cookie→拦截无Cookie请求”,步骤清晰,还能适配主流CMS(如WordPress、Domai CMS)。

第一步:给浏览器发送Cookie请求(前端操作)

在网站所有页面添加一段简单的JavaScript代码,让浏览器自动向后端发送请求,触发Cookie设置。如果用了CDN,要确保这个请求“回源”(不经过CDN缓存,直接访问服务器),代码如下:

JavaScript
<script>
    // 向后端发送请求,触发Cookie设置(替换example.com为你的域名)
    new Image().src = '//example.com/getcaptcha.php';
</script>

补充:如果有访客浏览器没开JavaScript,用<noscript>标签兜底,确保也能触发请求:

JavaScript
<noscript>
    <!-- 非JS环境下,用图片请求触发Cookie设置 -->
    <img width="1" height="1" src="//example.com/getcaptcha.php" alt="">
</noscript>

第二步:后端接收请求,设置Cookie(后端操作)

创建getcaptcha.php文件,后端接收前端请求后,给浏览器设置一个Cookie(可加密,增强安全性),代码示例:

PHP
<?php
// 设置缓存策略,确保Cookie正常生效
header('Cache-Control: private, max-age=3600');
// 返回空的GIF图片,不影响页面显示
header('Content-Type: image/gif');

// 如果已有Cookie,更新过期时间;没有则新建
if (isset($_COOKIE['domai_captcha'])) {
    setcookie('domai_captcha', time(), time() + 36000);
} else {
    setcookie('domai_captcha', time(), time() + 36000);
}

// 输出1x1的透明GIF图片(base64解码后)
echo base64_decode('T0OPODlGRQABAUYYYYYYYM///yH5BAEYYYYYLYYYYYYBAAEYYYIBRAA0');
?>

这段代码会给浏览器设置一个名为domai_captcha的Cookie,有效期10小时,访客完全看不到这个过程,不影响正常浏览。

第三步:表单处理程序验证Cookie(关键拦截步骤)

在处理表单提交的后端代码中,加入“Cookie验证”逻辑——没有 domai_captcha Cookie的请求,直接判定为爬虫,拒绝处理,代码示例:

PHP
<?php
// 验证是否存在有效的Cookie,没有则返回403禁止访问
if (!isset($_COOKIE['domai_captcha'])) {
    header('HTTP/1.1 403 Forbidden');
    die('禁止提交,非法访问');
}

// 以下是正常的表单处理逻辑(比如保存客户询价、发送通知等)
// ...
?>

四、CMS适配:用接口实现

如果网站用WordPress、Domai CMS等管理系统,可以通过系统接口集成这个功能,以Domai CMS为例:
在主题的functions.php文件中添加过滤函数,拦截无Cookie的表单提交:

PHP
<?php
// 表单提交前的验证函数
function _modify_feedback($request) {
    // 没有Cookie的请求,直接返回错误
    if (!isset($_COOKIE['domai_captcha'])) {
        return new DM_Error(
            __('Message Not Sent', 'aishred'), 
            __('Unauthorized Request, Please Use Your Browser to Access and Enable Javascript!', 'aishred')
        );
    }

    // 后续可添加其他数据处理逻辑(如过滤异常表单字段)
    // ...
}

// 注册过滤钩子,让函数生效
add_filter('pre_submit_feedback', '_modify_feedback');
?>

WordPress的实现逻辑类似,可通过add_actionadd_filter钩子,在表单提交前加入Cookie验证。

五、最终效果与补充拦截

用这个方法后,实测能减少90%以上的垃圾留言——爬虫因为没有Cookie被拦截,正常访客用浏览器访问时,Cookie会自动生成和携带,完全不影响操作。剩下的少量垃圾留言,用这两种方式处理即可:

  1. IP屏蔽:后台统计频繁发送垃圾留言的IP,手动加入黑名单;
  2. 手动管理:垃圾留言大幅减少后,人工审核剩余留言的工作量会大大降低,不用担心错过正常商机。

六、总结

企业网站对付垃圾留言,核心是“不影响客户体验,又能精准拦截爬虫”。这个Cookie验证法刚好满足:

  • 对访客:全程无感,不用输验证码、不用绕开关键词,正常操作即可;
  • 对管理员:挡住大部分垃圾留言,减少无效工作,专注处理真实客户咨询;
  • 对技术:实现简单,适配主流CMS。

当然,没有绝对完美的防护方法,这个方法主要针对“非浏览器爬虫”,后续还可以结合IP黑名单、异常提交频率限制等,形成更全面的防护体系。

以上方法仅供参考,具体业务实现还需要根据网站的实际情况来处理。

By 天海牧歌

东庵每见西庵雪,下涧长流上涧泉。 半夜白云消散后,一轮明月到窗前。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注