WordPress:Combating Comment Spam/Denying Access

来自站长百科
跳转至: 导航、​ 搜索


虽然拒绝使用评论spammers被看做是过激的行为,仍然有许多种方法可以阻止使用spammers,但是仍然允许发表评论。

要牢记大多数垃圾邮件发送者使用随意的IPs。通过垃圾广告者的IP来阻止他们,会阻止垃圾广告的泛滥,但是也会增加阻止合法用户的机率

否认使用垃圾广告发送者的IPs[ ]

当一个评论发送到你的网络博客上的时候,IP地址包含在一个信息包中,这个信息包与评论一起出现在网络上。将这IP地址看作是一个电话号码,WordPress评论审核就如一个呼叫显示,向你显示这个评论是源于哪里的。

应该注意发送垃圾广告者因为偷劫IP地址,而臭名昭著,因此有可能一个垃圾广告上的IP地址,事实上,可能是从一个合法连接的因特网服务上"偷"来的。

如果你正确地观看了IP地址,你可能注意到只有某些数字,有一些差异。例如,你可能看到:


  • 192.168.0.1
  • 192.168.0.2
  • 192.168.0.3


其它连续的或者相似的数字顺序。通过去除一个或者更多的IP数字,如:192.168,你能够给你的评论垃圾广告词列表添加上一个更加简单的IP数字—这样,任何以192.168开始的IP地址都会被筛选为垃圾广告,不管这个与这个"通配符"一起出现的数字是什么。这样省去了你输入许多单个数字的麻烦。要注意你是用的通配IP数字是哪类的,因为只使用192.可能会消除评论上合法的IP地址。

.htaccess文件-也控制了你的permlinks-可以用来完全地阻止一个IP来访问你的站点。你可以将这个文件放到你的网站的根目录上,或者网站的博客所在的目录上(如果博客所在目录与根目录不同)。

下面是呈现在网站根目录上.htaccess的一个例子。

order allow,deny
deny from 123.123.123.123
deny from 456.456.456.*
deny from 789.789.*.*
allow from all
否认123.123.123.123:只否认使用这个IP
否认456.456.456.*:否认使用所有的IPs以456.456.456开始的用户。

否认:789.789.*.* :任何人的IP以789.789开始,都会被阻止。

因此所有256*256唯一IP地址都被阻止了。

如果你真的开始阻止IPs,那么一个被制止的访客会看到一个403 错误网页。要确定这样的一个网页上列出了联系你的详细信息。查看你的主机来看看怎样制作一个自定义403(或者看看下面的内容)。

如果你开始使用*通配符来阻止IPs,那么至少给被阻止的用户一次向你发送电子邮件的机会,向你申明,你可能弄错了。

如果你想要核实受阻止的人,要得到一个朋友的IP,告诉他们你在执行什么,并且阻止他们(你要知道是可以这样做的,才行)。


否认使用没有链接的请求[ ]

当你的读者评论的时候,wp-comments-post.php文件得到了调用,执行,并且创建文章。用户的浏览器会发送一个关于这个的"转介"行。

当一个spam-bot进入的时候,会直接地袭击文件并且通常不会留下一个链接。这使得服务器能够有意地侦查,并且直接执行。如果你对Apache指令还不熟悉,那么在你的根目录.htaccess file文件上写上以下内容::

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourdomain.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

这样会:

  1. 观察什么时候文章写好了
  2. 查看文章是否在wp-comments-post.php
  3. 查看referrer是不是在你的域名上,还是没有 referrer
  1. 将spam-bot发送回到它原来的服务器的IP地址上。
NOTE 1:在第四行中,将你的domain.com改为你的domain.xxx没有www或者任何的前缀。
注 2:有可能某个人的浏览器不会发送referral,但是这种情况很少。

这本质上是在它自身上偏转了 spam-bot back。

贴士:如果你想看看这个内容,而且你知道你的根目录的绝对路径,你可以这样做:

在RewriteEngine On
RewriteLog /absolute/path/to/your/wwwroot/public_html/rewrite_log.txt
RewriteLogLevel 2

当重写规则得到了激活,你可以在rewrite_log.txt上得到以下的内容:

65.197.28.xxx- - [06/Feb/2005:10:59:34 --0500] [yourdomain.com/sid#80054890][rid#804b6a50/initial] (2) init rewrite engine with requested uri /wp-comments-post.php
65.197.28.xxx- - [06/Feb/2005:10:59:34 --0500] [yourdomain.com/sid#80054890][rid#804b6a50/initial] (2) rewrite /press/wp-comments-post.php -> http://65.197.28.xxx/
65.197.28.xxx- - [06/Feb/2005:10:59:34 --0500] [yourdomain.com/sid#80054890][rid#804b6a50/initial] (2) explicitly forcing redirect with http://65.197.28.170/
65.197.28.xxx- - [06/Feb/2005:10:59:34 --0500] [yourdomain.com/sid#80054890][rid#804b6a50/initial] (1) escaping http://65.197.28.xxx/ for redirect
65.197.28.xxx- - [06/Feb/2005:10:59:34 --0500] [yourdomain.com/sid#80054890][rid#804b6a50/initial] (1) redirect to http://65.197.28.xxx/ [REDIRECT/301]

Taken from an actual log

注:虽然阻止IP地址非常容易,针对使用折中的机器,因为两个原因散布他们的垃圾广告的spotshot, 这种方法是无效的:

1.机器的最初所有者仍然在使用机器而且很可能是有分寸的,不应该被阻止的。

2.任何人试着被IP阻止,大量这样的机器会泛滥。

否认使用 Referrer 垃圾广告发送者[ ]

许多人在他们的站点上或者链接上显示referrer,这样人们就可以访问他们的站点。发送垃圾广告者侵犯了这个并且不加选择的在博客上发送垃圾广告(即使写博客的人没有这个功能),用referral链接指向他们的spammy站点。他们不再浪费你的资源,弄坏你的合法的referrer的列表,并且降低你的读者访问速度。

为了节省资源,发送垃圾广告者通过用他们的垃圾广告referres来发送评论垃圾广告bots,得到two-in-one-shot的效果。因此,你可以通过阻止referrer垃圾广告来阻止一些评论垃圾广告。

如果你知道了你想要阻止哪个referrer URL,相信我,你就会知道,通过将以下的内容添加到你的.htaccess文件中,你可以阻止那个referrer URL。

SetEnvIfNoCase Via evil-spam-proxy spammer=yes
SetEnvIfNoCase Referer evil-spam-domain.com spammer=yes
SetEnvIfNoCase Referer evil-spam-keyword spammer=yes
SetEnvIfNoCase Via pinappleproxy spammer=yes
SetEnvIfNoCase Referer doobu.com spammer=yes
SetEnvIfNoCase Referer poker spammer=yes

Order allow,deny
allow from all
deny from env=spammer

上述的.htaccess规则是由Tom Raftery带给你,Tom Raftery最初使用有规则的重写条件,后来决定"使用 SetEnvIfNoCase 来代替RewriteCond – 似乎很有用(特别对referrers而言)。"

阻止Referrer垃圾广告的插件可以在官方 WordPress 插件目录中找到。

使用一个自定义 403[ ]

这是一个通常的网页,使用.htaccess命令服务器显示你的网页,而不是默认的网页。

.htaccess应该有:

ErrorDocument 403 /errors/403.html

例如,创建一个称为"错误"的目录,并且将你的自定义403信息放到这个目录。

要测试这个,阻止一个朋友并且索要反馈信息。

你以相同的方式创建一个自定义404。

警告:阅读你的主机所有的任何和所有的关于使用自定义网页的文件-对于上述的建议,你的服务器要求可能有所不同!如果有疑问,直接地联系你的主机,寻求帮助。

使用 PHP 编码来阻止[ ]

你可以将这个添加到任何PHP网页的顶上方,在xxx或者yyy的位置输入真正的IP地址。

<?php
$block = array("xxx.xxx.xxx.xxx", "yy.yy.y.yyy");

if (in_array ($_SERVER['REMOTE_ADDR'], $block)) {
    header("Location: http://google.com/");
    exit();
}
?>

资源[ ]