我这个模板是适合800分辨率的。所以看代码可能来这里看比较直观一点。
http://www.4ngel.net/blog/angel/archives/?article-118.html
目前来说,防范trackback垃圾已经迫在眉睫,因为到现在为止。很多BLOG只做了一些评论的过滤,要防范评论垃圾信息很简单,但是防范Trackback spam却不能象评论那样,因为Trackback来自其他的BLOG,所以很多内容都是不可以确定的,比如按照其他链接出现次数,和垃圾词汇进行过滤,是不可能的,不然我收集一些网站,或者是骂点人。都有可能不能通过别人的BLOG检查。所以我根据Trackback Spam的特征,想出了一套比较可行的办法。采用分数制度,给接收来的Trackback数据,进行评分操作。最后决定数据处理办法。懒得组织语言说了。贴出我和BO-BLOG作者BOB的部分聊天记录。
|
用户:所有分组(QQ好友) ================================================== -------------------------------------------------- 2006-04-10 20:22:24 Bob 2006-04-10 20:23:57 Bob 2006-04-10 20:24:45 Small!A 2006-04-10 20:24:52 Small!A 2006-04-10 20:24:29 Bob 2006-04-10 20:24:41 Bob 2006-04-10 20:25:37 Bob
如果是负的。就表示是垃圾。 2006-04-10 20:29:09 Small!A 2006-04-10 20:29:15 Bob 2006-04-10 20:29:34 Bob 2006-04-10 20:29:46 Bob 2006-04-10 20:31:10 Small!A 度过滤范围内。就直接不予处理。 2006-04-10 20:32:23 Small!A 不是没办法PING你? 2006-04-10 20:32:20 Bob 2006-04-10 20:32:29 Bob 2006-04-10 20:33:11 Small!A 2006-04-10 20:35:04 Bob 密码串。今后A再次向B发送TB时,自动附上这个密码串。B验证这个密码的正确性,再检查A是否在曾经允许过的列表内。两者都正确后即刻显示。。。 2006-04-10 20:35:39 Bob 2006-04-10 20:37:59 Small!A 2006-04-10 20:38:04 Bob 2006-04-10 20:38:21 Bob 2006-04-10 20:38:50 Bob 2006-04-10 20:39:03 Bob 2006-04-10 20:39:47 Small!A 2006-04-10 20:39:23 Bob 2006-04-10 20:40:16 Small!A 2006-04-10 20:40:22 Bob 2006-04-10 20:40:36 Bob 2006-04-10 20:41:24 Small!A 2006-04-10 21:14:19 Small!A 2006-04-10 21:13:58 Bob 2006-04-10 21:17:00 Small!A 2006-04-10 21:17:13 Small!A 2006-04-10 21:27:12 Small!A 2006-04-10 21:26:42 Bob 2006-04-10 21:27:27 Small!A 2006-04-10 21:27:35 Small!A 2006-04-10 21:27:37 Small!A 2006-04-10 21:27:12 Bob 2006-04-10 21:27:18 Bob 2006-04-10 21:28:18 Bob 2006-04-10 21:31:26 Small!A 这5个必须的。对吧? 我们的tb.php文件。就去抓取他的url的内容。看看内容里是不是包含了他提交的title等这些数据。如果包含。则说明他可能是正常发送。 也就是说。他要正常发送。就要提供正确的数据。只要正确的数据。才加分。否则减分。分数过低。直接CUT掉! 2006-04-10 21:31:21 Bob 2006-04-10 21:32:08 Small!A 2006-04-10 21:31:36 Bob 2006-04-10 21:31:38 Bob 2006-04-10 21:32:15 Small!A 2006-04-10 21:32:22 Small!A 2006-04-10 21:32:01 Bob 2006-04-10 21:32:39 Small!A 2006-04-10 21:32:44 Small!A 2006-04-10 21:32:12 Bob 2006-04-10 21:32:25 Bob 2006-04-10 21:33:09 Bob 2006-04-10 21:34:20 Small!A 2006-04-10 21:35:37 Bob 2006-04-10 21:36:13 Small!A 2006-04-10 21:36:08 Bob 2006-04-10 21:36:12 Bob 2006-04-10 21:37:00 Small!A 2006-04-10 21:36:41 Bob 2006-04-10 21:36:55 Bob 2006-04-10 21:37:29 Small!A 2006-04-10 21:37:56 Small!A 2006-04-10 21:37:31 Bob 2006-04-10 21:37:44 Bob |
相信大家看了应该都知道是怎么防御这个Trackback Spam了。具体代码是怎么实现的呢?下面就是目前sablog-x所使用的代码:
// 检查Spam
// 定义发送来的此条Trackback初始分数
$point = 0;
$options['tb_spam_level'] = in_array($options['tb_spam_level'], array('strong', 'weak', 'never')) ? $options['tb_spam_level'] : 'weak';
if ($options['audit_trackback']) {
//如果人工审核
$visible = '0';
} elseif ($options['tb_spam_level'] != 'never') {
$source_content = '';
if (!empty($url)) {
$source_content = fopen_url($url);
$this_server = str_replace(array('www.', 'http://'), '', $_SERVER['HTTP_HOST']);
//获取接受来的url原代码和本服务器的hostname
}
if (empty($source_content)) {
//没有获得原代码就-1分
$point -= 1;
} else {
if (strpos(strtolower($source_content), strtolower($this_server)) !== FALSE) {
//对比链接,如果原代码中包含本站的hostname就+1分,这个未必成立
$point += 1;
}
if (strpos(strtolower($source_content), strtolower($title)) !== FALSE) {
//对比标题,如果原代码中包含发送来的title就+1分,这个基本可以成立
$point += 1;
}
if (strpos(strtolower($source_content), strtolower($excerpt)) !== FALSE) {
//对比内容,如果原代码中包含发送来的excerpt就+1分,这个由于标签或者其他原因,未必成立
$point += 1;
}
}
$interval = ($options['tb_spam_level'] == 'strong') ? '30' : '60';
//根据防范强度设置时间间隔,强的话在30内发现有同一IP发送。弱的话就是60秒内发现有同一IP发送.
$query = $DB->query("SELECT trackbackid FROM ".$db_prefix."trackbacks WHERE ipaddress='".getip()."' AND dateline+".$interval.">='".time()."'");
$tatol = $DB->num_rows($query);
//在单位时间内发送的次数
if ($tatol > 0) {
//如果发现在单位时间内同一IP发送次数大于0就扣一分,人工有这么快发送trackback的吗?
$point -= 1;
}
$query = $DB->query("SELECT trackbackid FROM ".$db_prefix."trackbacks WHERE REPLACE(LCASE(url),'www.','')='".str_replace('www.','',strtolower($url))."'");
$tatol = $DB->num_rows($query);
//对比数据库中的url和接收来的
if ($tatol > 0) {
//如果发现有相同,扣一分。
$point -= 1;
}
if ($options['tb_spam_level'] == 'strong') {
//高强度防范
$query = $DB->query("SELECT title,ipaddress,articleid FROM ".$db_prefix."trackbacks WHERE ipaddress='".getip()."' OR articleid='".$articleid."'");
//搜索数据库内发送此trackback来本站的IP和文章ID
while ($trackback = $DB->fetch_array($query)) {
if ($trackback['title'] == $title && $trackback['ipaddress'] == getip()) {
//如果数据库内的title和接收来的title一样,IP也一样,视为重复发送。就减1分。
$point -= 1;
}
if ($trackback['ipaddress'] == getip() && $trackback['articleid'] == $articleid) {
//如果数据库内的articleid和接收来的articleid一样,IP也一样,视为重复发送。就减1分。
$point -= 1;
}
}
// 防范强:最终分数少于1分就CUT!
$visible = (($point < 1) ? '0' : '1');
} else {
// 防范弱:最终分数少于0分才CUT!
$visible = (($point < 0) ? '0' : '1');
}
} else {
$visible = '1';
}
// 检查Spam完毕
上次和O-BLOG作者风色提起过,可是不经常看他上QQ,目前通过大量测试。。已经证实可以起到防御的作用。希望有各位看了我的文章,可以提出自己的看法,互相交流。继续共同提高。呵呵。
要拍砖的,尽管来,没有刺激,哪有膨胀,没有压力,哪有动力,没有反馈,哪有更好?
18日中午想到的,还可以多加一条判断就是拿接收到的$url参数和数据库内的对比,如果存在了,再扣一分!




4ngel / Small!A
