今天抽时间改写了一下trackback功能,并重新开放。
各位向我开炮。测试一下新的Trackback功能是否正常啊。。呵呵。。
人的头脑太复杂,时间过得久,有时候连自己也被自己骗了,记下来才是最真实的......
Written by angel on 2007, March 25, 5:33 AM
今天抽时间改写了一下trackback功能,并重新开放。
各位向我开炮。测试一下新的Trackback功能是否正常啊。。呵呵。。
Written by angel on 2007, March 25, 2:55 AM
如果朋友的文章写了有几天了。我才看到。想发个trackback过去,怎么办呢?发不了?
我看到很多BLOG都是1天Trackback就失效。那还开这个功能做什么啊??
Written by angel on 2006, April 20, 11:37 AM
我公开了SaBlog-X的Trackbak防范spam机制以后,经过我再次改良,再次又证明此套方案的优秀性!哈哈。炫耀一下。
只收了一条。其他全部拦截!不管IP是不是一样。用代理还是分布式都全部拿下。哈哈。
Written by angel on 2006, April 18, 2:19 AM
我这个模板是适合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参数和数据库内的对比,如果存在了,再扣一分!
Written by angel on 2006, April 11, 3:20 PM
启用了独特的trackback Spam防范机制。一共经过5步处理,如果是高强度防范,则经过6步处理。每一步都是决定信息去处的关键。感谢国际村的sadly帮忙测试,他用他的程序给我发送Trackback Spam,系统成功拦截。并且有记录。
欢迎大家继续测试。如果是正常从各位的BLOG发送过来的。应该是接收没有什么问题的。后台可以设置防范等级。欢迎发送各种Trackback spam来这篇文章。其他的文章希望各位大哥大姐手下留情。
根据后台的记录,发现 59.42.188.xx 的朋友在11日晚上9:20-9:30这段时间发送了10多条Trackback过来。成功拦截了10多条,有2条系统认为是正常的。特别感谢这位朋友的热心测试。
感谢小麟哥 - Fighting!的手工测试!如果不介意,请再手工发送几十条过来看看。
12日凌晨4点把所有垃圾或者测试的Trackback清除,最新加入了人工发送的判断。各位如果愿意花5分钟,继续疯狂轰炸这篇文章。让我好不断改善。杜绝各种垃圾信息!谢谢各位啦!!!
再次感谢221.235.207.xx,(59.35.10.xx,59.35.49.xx,59.35.36.xx),221.12.110.xx 这3位朋友的热心测试。后台记录了共30多条来自这几个IP发送的测试数据。