前几天我的blog似乎被一个国外的垃圾留言发送机(不清楚这种专门用来发布垃圾留言的软件学名叫什么)给盯上了,一天里往我的blog发送了40多条垃圾留言。
虽然不知道它确切的实现垃圾留言方式,但可以肯定它不是用手发的,据我的猜想(只是猜想没有实践过的),它应该是通过这种方式实现:
我们知道的是我的blog现在用的留言系统blogkomm是没有用户控制的,所以这个垃圾留言发送机首先要做的就是搜集使用blogkomm的网站,因为这些网站用的blogkomm是一样的,在发送留言的http请求中它只需要稍微改改http地址就可以了。关于如何搜集到使用blogkomm的网站其实也很简单,用google就可以了,比如我的这篇文章里有这么多的’blogkomm’关键字,一定会被google收录,到时候也就进入到这个垃圾留言数据库中。然后它要做的就是把填了垃圾留言的 http request 发给页面就可以了。
如何禁止这些垃圾留言,但又需要可以让普通用户可以正常的留言。因为这些垃圾留言就目的而言就是要留下反向的链接,一般留言会是:
http://www.ericfish.com
<a href=”http://www.ericfish.com”>desk3</a>
[url=http://www.ericfish.com]desk4[/url]
[link=http://www.ericfish.com]desk6[/link]
可以看到的是它一定要留下的是一个可以被搜索引擎发现超级链接,所以它必须以http://开头。如果在留言的内容中不允许有http://这个字符,世界从此就会安静许多。
blogkomm代码的更新,打开do_comments.php,改动以下函数 (粗体代码是改动部分)
function comments_eingaben($eingabe)
{ global $mail_valid;
// filter garbage comment
$garbage = “http://”;
$pos1 = strpos($eingabe[3],$garbage);
if ($eingabe[0] == “” ){
echo “<div style=”color: red”><strong>”.msg(‘enter_name’).”</strong></div>”;
$okay=0;
}
elseif ($eingabe[1] == “” || (!strstr($eingabe[1],”@”)) || (!strstr($eingabe[1],”.”)) and $mail_valid==1){
echo “<div style=”color: red”><strong>”.msg(‘enter_e-mail’).”</strong></div>”;
$okay=0;
}
elseif ($eingabe[3] == “” ){
echo “<div style=”color:red”><strong>”.msg(‘enter_comment’).”</strong></div>”;
$okay=0;
}
// filter garbage comment
elseif ($pos1 !== false){
echo “<div style=”color:red”><strong>评论中不允许 http:// 字符,以防止垃圾留言,请去掉http://后重新发布,谢谢</strong></div>”;
$okay=0;
}
else
{
comments_einlesen(); // einlesen (german): read in comments
}
}