我几乎喜欢成为科技博主的每一个部分:学习、讲道、开玩笑、研究。 我非常讨厌写博客的一个部分:处理垃圾评论。 在过去的两年里,我的博客每天有 8,000 多条垃圾邮件评论。 每天. 用那些垃圾来膨胀我的数据库会以各种方式减慢我的博客速度,最近我决定我已经完成了它。 我也厌倦了审核评论并在我的电子邮件收件箱中看到大量垃圾邮件评论通知。 完毕。 就像老板一样……我阻止了它。 死的。 这就是我的做法!
我是如何收到垃圾邮件的
没有办法说,但我怀疑机器人检测到我有一个 WordPress 博客,知道提交评论的表单键,并相应地这样做了。 我收到了关于伟哥、西力士、Michael Kors、耐克鞋等的评论。 只有机器人才会花时间。 这一切都必须是检测到的自动攻击——没有针对性。
什么不工作
一切。 我使用了不同的 WordPress 插件并继续收到垃圾邮件。 Akismet 是首屈一指的 WordPress 垃圾邮件保护程序,它无法阻止这些问题 - 并且包含 100KB+ 的 JavaScript,这降低了我的网站速度。 我从未使用过验证码实用程序,因为在我的网站上发表评论的任何障碍都应该是我要处理的问题,而不是你们所有人。 最后,许多公用事业让我失望了。 我很失望,但拒绝屈服。
什么有效
第一步是删除所有反垃圾邮件插件,因为它们很有可能会互相干扰并让垃圾邮件进入。我的解决方案是允许通用的反垃圾邮件解决方案:在表单中添加一个应该在提交过程中保持空白。 空值但通过键出现:前提是读取表单输入的机器人会用垃圾填充表单字段值,以确保不会因空值而拒绝提交。
我如何实施垃圾邮件保护
您不能简单地在服务器端添加输入——它们被输出到页面,机器人可以读取这些并填充(或不填充)它们。 在客户端创建这些字段消除了简单的 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 代码中附加 secret 字段:
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 小函数的客户端魔法让您的生活更轻松!