浏览模式: 标准 | 列表 2006年04月的文章

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

DVBBS搞什么安全极限挑战

听说动网BBS准备出php版本了,还是比较兴奋的。一是说明了PHP+MYSQL的优势。二是我研究网络安全的,还是主要WEB安全,这下他是自己装上我的枪口的。

后来在论坛里看到一个标题:动网论坛挑战安全极限--千金抓“虫”大行动

奖励标准:
1、前台跨站脚本攻击,发现此类安全问题奖金1000元人民币。
2、前台Sql注入攻击,发现此类安全问题奖金2000元人民币。
3、能获取拥有所有权限的后台帐号,发现此类安全问题奖金2000元人民币。
4、其他小Bug。发现影响动网论坛使用安全性的各类其他小Bug,按Bug大小实行奖励(100-1000元)。

这个价格傻瓜才会给你找!!!如果能找到跨站。可以挂马了,发现注入。就更加有搞了。如果我发现漏洞,一个漏洞少说可以卖2W!要知道dvbbs的用户量这么大,如果用来做非法的事情,赚来的钱,肯定不下20W。我看DVBBS的开发人员是长久面对代码头皮发麻了。。

Tags: dvbbs, php

生成静态页面功能完成30%

又要做一个单独的模板文件。很多动态的判断,比如登陆状态没办法判断。还有一些即时性的数据,比如浏览次数,统计等,左边的公用数据,可以写到一个JS里。然后调用就OK了。

不过!提供下载的正式版为免费版本,不提供静态生成功能。收费版才提供。哈哈。。

反正免费版本足够用。哪个喜欢静态生成的,就支付给我那么几十块就OK!哈哈,爱用就买。

图片附件:
html.gif

大小: 38.55 K
尺寸: 500 x 337
浏览: 543 次
点击打开新窗口浏览全图

Tags: 静态生成

做了一套灰色系的模板

只是改了改色调而已。感谢Zero为我做的LOGO。很漂亮。

不过觉得灰色调比较难配色,我不是搞设计的。第一次搞深色的界面。自己感觉看久了都不是很舒服。。看来我还是适合做谈雅风格的。

由于是未成品。以后有人愿意完善或者我再程序发布后单独提供下载吧。。

图片附件:
grey.jpg

大小: 175.82 K
尺寸: 486 x 500
浏览: 770 次
点击打开新窗口浏览全图

Tags: 模板

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

有不少人问我,为什么后台的首页文件不用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
浏览: 336 次
点击打开新窗口浏览全图

图片附件:
scanwebpath2.gif

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

Tags: 入侵