我几乎喜欢成为科技博主的每个部分:学习、说教、开玩笑、研究。我绝对讨厌写博客的一部分:处理垃圾邮件评论。在过去的两年里,我的博客每天收到 8,000 多条垃圾评论。 每天。用这些垃圾填满我的数据库会以各种方式减慢我的博客速度,最近我决定我已经完成了它。我也厌倦了在我的电子邮件收件箱中审核评论和看到大量垃圾邮件评论通知。完毕。就像老板一样……我阻止了它。死的。我是这样做的!
我是如何收到垃圾邮件的
没有办法告诉我,但我怀疑机器人检测到我有一个 WordPress 博客,知道用于提交评论的表单键,并相应地这样做了。我收到了关于伟哥、西力士、Michael Kors、耐克鞋等的评论。只有机器人才会花时间做的事情。这一切都必须是检测到的自动攻击——没有针对性。
什么不起作用
一切。我使用了不同的 WordPress 插件并继续收到垃圾邮件。 Akismet 是首屈一指的 WordPress SPAM 保护程序,它无法阻止这些问题——并且包含 100KB+ 的 JavaScript,这让我的网站变慢了。我从来没有使用过验证码实用程序,因为在我的网站上发表评论的任何障碍应该是我要处理的问题,而不是你们所有人。最后,我对众多实用程序感到失望。我很失望,但拒绝屈服。
有效的方法
第一步是删除所有反垃圾邮件插件,因为它们很可能相互干扰并让垃圾邮件进入。我的解决方案是允许通用的反垃圾邮件解决方案:添加一个 INPUT 到在提交过程中应保持为空的表单。值为空但通过键存在:前提是读取表单输入的机器人会用垃圾填充表单字段值,以确保提交不会基于空值而被拒绝。
我如何实施垃圾邮件防护
您不能简单地在服务器端添加输入——它们会输出到页面,机器人可以读取这些内容并填充(或不填充)它们。在客户端创建这些字段消除了简单的 bot / curl 阅读器。您可以使用 JavaScript(通过任何框架)添加上述表单字段,这是您最好的选择。然而,在我们这样做之前,让我们实施服务器端垃圾邮件块检查。
WordPress PHP
在服务器端接受评论之前,我们需要检查动态密钥是否存在。我们只需要一个 isset 检查:
// Fuck off spammers function preprocess_new_comment($commentdata) { if(!isset($_POST['is_legit'])) { die('You are bullshit'); } return $commentdata; } if(function_exists('add_action')) { add_action('preprocess_comment', 'preprocess_new_comment'); }
如果检查失败,我们将拒绝评论。当然,这意味着不支持 JavaScript 的用户的评论将被拒绝,但被垃圾邮件发送的可能性可能比不支持 JS 的用户大,所以我可以接受。如果未设置密钥,我们将完全拒绝该评论。当然,这是一个机会,但统计数据表明这是值得的。
JavaScript
这里的简单答案是使用基本的 JavaScript 注入表单字段,并且由于每个 JS 框架都有自己的语法,我将继续为所有这些框架提供代码。在页面加载时添加所述字段对我来说似乎有点可疑,因为智能机器人可能能够检测到这一点。就我的博客而言,我使用 MooTools 并通过 AJAX 提交评论,因此我只需在提交时在 JavaScript 代码中附加秘密字段:
var form = $('comment-form'); new Request({ url: form.action, method: 'post', onRequest: function() {}, onSuccess: function(content) {}, onComplete: function() {} }).send(form.toQueryString() + '&is_legit=1');
在提交时添加该密钥已被证明是安全的。
获胜
两周后我收到了 0 条垃圾评论。零。没有任何。零。绝对拉链。我从每天 8,000 多个变成了没有。比 Akismet 好,比任何插件都好。将 WordPress 垃圾邮件预防掌握在自己手中——使用带有小 PHP 函数的客户端魔法让您的生活更轻松!