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]
这样会:
- 观察什么时候文章写好了
- 查看文章是否在wp-comments-post.php
- 查看referrer是不是在你的域名上,还是没有 referrer
- 将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(); } ?>