登陆
浏览模式: 标准 | 列表 技术相关

Sablog-X采用的Trackback Spam防范机制

我这个模板是适合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好友)

==================================================
消息组:我的好友(92)
==================================================
消息类型:聊天记录
==================================================

--------------------------------------------------
消息对象:Bob(22112197)
--------------------------------------------------
2006-04-10 15:22:51 Small!A
在?
 
2006-04-10 15:23:17 Small!A
我想到一个比较有意思的防范track的办法。讨论一下。  

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:28:51 Small!A
定义一个初始分数。
我是这样来的。
$point = 0;
发送完整的trackback里面不是有url吗?
直接读取这个url的源代码进行分析。读取失败。减1分。
如果可以在原代码里找到提交url。加一分。
找到标题加一分,找到摘要加一分,就是通过对比。
综合起来的分数。可能是负的,可能是正的。

如果是负的。就表示是垃圾。

2006-04-10 20:29:09 Small!A
具体我在实验。不知道有效果不。。

2006-04-10 20:29:15 Bob
不错的思路3481D2

2006-04-10 20:29:34 Bob
关键词可以考虑进去否?

2006-04-10 20:29:46 Bob
我今天在地铁上冒出来一个想法

2006-04-10 20:31:10 Small!A
还有可以设置过滤强度。比如计算结果是0。则表示基本正常。大于零,正常。如果-1。我表示为弱。设置为隐藏。到后台审核。如果得到-2甚至更少的分数。就表示在我设置的强

度过滤范围内。就直接不予处理。

2006-04-10 20:32:23 Small!A
我想过了。关键词和HTTP出现次数。都不行。不同于评论。不能用评论的办法。我发的文章。刚巧你禁止内容内的某个词。或者我是推荐一些好网站。超过你设置的HTTP次数。那

不是没办法PING你?

2006-04-10 20:32:20 Bob
我今天想到一个。。。可以建立一个trackback回访制度。

2006-04-10 20:32:29 Bob
让我整理一下思路。。。

2006-04-10 20:33:11 Small!A
好的。等你组织语言。呵呵。

2006-04-10 20:35:04 Bob
比如,A发送给B一个trackback,B在检查之后发现A是来自从来没有发送过trackback给他的一个地址。于是,A的TB暂时不显示。B的管理员通过A的tb之后,B自动向A发送一个确认

密码串。今后A再次向B发送TB时,自动附上这个密码串。B验证这个密码的正确性,再检查A是否在曾经允许过的列表内。两者都正确后即刻显示。。。

2006-04-10 20:35:39 Bob
[表情]有点bt的想法

2006-04-10 20:37:59 Small!A
这个相当于几次握手了?我感觉不是很舒服。是我不会再给你发了。
我的看法是在我们这边单方面处理。如果双方都要处理的话。你没办法确定对方的BLOG系统跟你是否统一标准。涉及到处理我估计会麻烦不少。。。

2006-04-10 20:38:04 Bob
嗯,麻烦就在于要在现有的标准上

2006-04-10 20:38:21 Bob
而trackback的标准本来就不考虑spam

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
有没有测试的工具C7B305

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
hao〕

2006-04-10 21:17:00 Small!A
放你的WEB上。给我地址。

2006-04-10 21:17:13 Small!A
然后我发送TRACK看看。分数是多少。

2006-04-10 21:27:12 Small!A
1分。

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
$point:0 [:D]

2006-04-10 21:31:26 Small!A
如果他是软件发送。那么他就只有一个地址
他要发送的话。必须提供
$articleid
$title
$excerpt
$url
$blog_name

这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
这好像就是他发spam的目的啊

2006-04-10 21:33:09 Bob
不过,效果肯定会有的

2006-04-10 21:34:20 Small!A
所以我们在后台设置一个防范强度。
[图片]
分数在某个范围属于强?某个范围输入弱。可以根据判断是隐藏该引用。还是直接不处理该引用。

2006-04-10 21:35:37 Bob
good

2006-04-10 21:36:13 Small!A
可以根据范围判断是隐藏该引用。还是直接不处理该引用。 分数特别低或者最低。就可以不处理了。这个范围就是防范等级咯。

2006-04-10 21:36:08 Bob
改天我要把trackback部分重写一下。现在我的tb没有隐藏这个熟悉

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
哦。明白。加个type判断是什么对吧?

2006-04-10 21:37:31 Bob
0= 公开评论 1=隐藏评论 2=垃圾嫌疑的公开评论 3=垃圾嫌疑隐藏评论 4=tb

2006-04-10 21:37:44 Bob
看来要用到 5

相信大家看了应该都知道是怎么防御这个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参数和数据库内的对比,如果存在了,再扣一分!

Tags: sablog-x, trackback, spam

目录探测也是入侵收集信息的关键

有不少人问我,为什么后台的首页文件不用index.php而用admincp.php?多麻烦啊。其实我没有用index.php是有准备的。通常要了解一个网站的结构。探测目录也是收集目标网站信息的手段之一。可以让攻击者知道有什么目录。根据目录命名大概判断目录里存放的是哪一类文件。

所以我在几个重要目录里,放了一个index.php文件。文件内容:

<?php
header
('HTTP/1.1 404 Not Found');
?>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>404 Not Found</TITLE>
</HEAD><BODY>
<H1>Not Found</H1>
The requested URL <?php echo dirname($_SERVER["SCRIPT_NAME"]);?> was not found on this server.<P>
<HR>
<ADDRESS>Web Server at <?php echo $_SERVER["SERVER_NAME"];?> Port <?php echo $_SERVER["SERVER_PORT"];?></ADDRESS>
</BODY></HTML>

很多扫描器都是通过HTTP协议标头信息判断,所以我发送一个404,就表示目录或文件都不存在。我用扫描器扫描WEB路径,看看扫描于震的BLOG就把所有目录都扫描出来了。而扫描我的。只扫描出几个没有放上面的代码的目录。

这样,如果不手工去判断,或者更好的设置扫描器。就很难判断出admin、include这些目录是否存在。安全,需要从每一个细小的环节做起。呵呵。这下大家知道为什么我后台不用index.php作为首页了吧。

图片附件:
scanwebpath1.gif

大小: 13 K
尺寸: 452 x 422
浏览: 312 次
点击打开新窗口浏览全图

图片附件:
scanwebpath2.gif

大小: 11.92 K
尺寸: 452 x 422
浏览: 229 次
点击打开新窗口浏览全图

Tags: 入侵

Trackback测试

启用了独特的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发送的测试数据。

图片附件:
tbspam.gif

大小: 3.16 K
尺寸: 398 x 107
浏览: 199 次
点击打开新窗口浏览全图

Tags: trackback, 测试

Trackback也验证?

最近发现有人利用trackback功能发广告。我觉得没什么说的。也懒得打字了。

sadly搞的Trackback垃圾,很多人说这个人不怎么样,说发这些怎么怎么不对,站在网络安全角度来说。sadly是好样的。我们发现漏洞,如果不发布出来。只有导致更加多的人受害。只有公布了以后。不管白与黑。技术都会有提高。不知道sadly能不能看到我的文章。但是不管多少人骂你发Trackback垃圾,但是作为网络安全技术人员。我支持你。呵呵。

我们搞安全的知道一个定律,道高一尺,魔高一丈。如果按照BO-BLOG的方法,在URL加特殊字符串,如果软件读取HTML代码,分析出那段特殊字符串,一样可以发送垃圾。只要是文本。要分析出来可以在1秒或者2秒之内。呵呵。图片验证?算了吧。

我看。还是用评论防止垃圾的办法。自己判断设置属性为隐藏吧。。再到后台按照IP清理吧。

Tags: trackback, 验证, spam

有必要生成静态页面吗

通常总认为静态页面执行速度快且不费资源,很多大型网站都将最终页面生成静态的,可是从.php技术说它本身支持多种级别的缓存,而且很多种模板支持缓存,就速度来说。已经不是什么急需解决的难题,而且和html静态页面的速度可以说没有区别。还有必要生成静态的么?

单用户的博客系统不同于各种CMS,大流量,服务器完全可以承受,除非那种查询很多的博客,基于数据库的WEB程序非常多,竞争造成了静态页面的流行。对于那些死的不变的系统,批量生成html页面确实是不错的技术,大大提高网站的稳定性、降低负载。可以减少SQL服务器的负荷。我觉得模拟静态和真正的静态没有什么区别。没有必要用那么一大堆文件。和那么多代码代替几行模拟静态的代码。而且后期维护也麻烦。改动一次还要写一次文件,就安全角度来说,多一个可写目录。多一个保存后门的地方。

至于为了搜索引擎而优化,这个其实是误传。看搜索引擎列出的页面,asp、cgi、php、aspx的什么都有,并不时只有html的。搜索引擎看的是内容(例如一些关键head中的标记),要根据所有引擎的算法不断修改产生的页面的内容。即使不模拟出静态页面,也照样可以搜索得到。比如:

http://www.baidu.com/baidu?word=%C2%DB%CE%C4%CC%E1%B8%D9&tn=myie2dg

上面的关键词,就是“论文提纲”,搜索出来的就是Sablog程序。排行第一。照样不是静态文件,不是html结尾。所以说静态文件和非静态的,对搜索引擎没有什么影响。

还不知道有什么理由还要做静态生成

Tags: 静态生成, html