spam模块

抵御 Spam 的进攻

网络的 spam 如幽灵般的细沙,一旦在网站里发现一个空隙,就源源不断的涌入。虽然 Drupal 的 akismet 和 spam 模块可以近乎完美的识别 spam 评论,但是他们在实施上有一个问题:spam 先提交给数据库再进行过滤。这样以来每次 cron 运行的时候都要删除数以万记的 spam ,加重了服务器端的压力,所以最好的办法是能够在 spam bot 留下评论之前就可以阻止它,于是有了各种各样的 captcha。 先用图像的 captcha, 这也是时下最流行的一种方式,但是有时图像里的数字字母过于难识别,即便是真人看到,也未必能辨别出来,所以又改用了算术题 captcha,留言是必须做一道的加法题,这种方法虽然方便了访客,但是却很容易被 spam bot 破解,因此仍然无法有效的阻止 spam 评论,所以最好有一种介于图像与简单数学题之间的辨别方式,于是就有了 Captcha Riddler 模块,可以自己设计一个问题,让访客留言的时候解答,以判断其是否是“人类”。这个模块还可以配合 i18n ,适合多语言网站使用。至于我这里,因为访客都是使用中文的,所以设置的问题很简单“一年有多少个月”,为了方面没有汉语输入法的访客输入,因此答案用阿拉伯数字即可。问题虽然简单,但是最近一段时间来成功的阻挡了 spam bot 的侵袭,也减轻了 akismet 和spam 模块的压力,效果很好,如果有同样的问题,不妨一试。

Blog分类: 

使用 Captcha + TextImage 阻挡 Spam

Drupal的Spam模块虽然功能强大,但是其运作原理类似先将spam吃掉,然后再消化(先把spam甄别出来,设置为“未发表”状态,然后在运行 cron job 的时候将其删除),这样一来还是比较耗费资源,所以决定还是用 Captcha 模块。4.7 版本的 Captcha 模块重新做了调整,为了适应没有安装 GD 的用户使用,Captcha 将原有功能分解为两个功能:数字运算 Captcha 和 TextImage Captcha。所谓数字运算,就是说在留言时必须计算一道数学题,用来证明是真人在留言;而 TextImage 则和通行的Captcha系统一样,通过辨认图片上的字母来填写留言。后者需要同时安装一个单独的 TextImage 模块。呵呵,希望这下子可以更好的阻挡 Spam。因为用来 Captcha,所以决定暂时停止 Spam 模块,并且不再要求留言时填写 Email ,希望不给留言增加麻烦。

Blog分类: 

二个重要模块升级 + 一个新的模块

Spam模块的4.7版本终于发布了,在这个垃圾横飞的互联网星球上,方便人们交流的comment,trackback等功能很容易遭到垃圾信息的侵袭,一夜之间可能突然多了上千条色情网站广告的评论,让人不胜其烦。而 Drupal 的Spam 模块很好的解决了这个问题,在 4.6版本下使用起来的效果非常好,但是 4.7 版本的开发直道上周才完成,在这里可以下载,由于许可的问题,这个模块无法在Drupal的主站下载。注意安装以后需要运行 update.php 来升级旧的数据库。

另外一个今天有了新的更新的模块是 Trackback 模块。但是还没有 4.7 的正式版,我试了一下已经可以用了,但是需要自己写一个升级旧的数据库的脚本,我写了一个,如下,保存为 trackback.install 放入 trackback 的目录下即可。

但是我现在没有启动 trackback 模块,因为随着 google blog search 与 technorati 的发展,似乎自动的 backlink 要比手动的 trackback 要好用一些。

最后一个Comment Info 模块,功能不多,但是却很实用,方便匿名访客书写评论,如果一个访客在你的blog留过言,下次再留言时可以不用再重新填一遍个人信息。留言下面多出了一个Save my Comment Information for next time,如果勾选,下次留言将无需再次填写信息。

Blog分类: 

过火的spam模块及修正

前段时间为了过滤trackback spam而开启的新版spam模块不断的滤掉评论,所以只好把trackback和spam同时关掉了。昨天想到spam模块里其实是可以定义过滤那些内容的,然后看了一下,把spam模块中“Filter comments”这个选项给勾除了,以为这样“评论”的内容就不会受到影响了,但是刚才发现,“评论”还是被砍掉了,很是纳闷,再次研究了一下设定,发现除了“Filter Trackback"这个选项外,还有一个选项--Filter Spam Url 被启动了,这个选项的解释是:

Enabling this option will tell the spam filter to treat URLs embedded within comments and other contents as a special case. When URLs that were found within known spam are found in new content, the new content is automatically considered to be spam. When this option is enabled, a single spam URL found within an otherwise spam-free posting will cause the filter to mark the new content as spam.

启动这个选项将使spam过滤器把评论以及其他内容中所包含的url作为特例。当已知spam中包含的url出现在新的内容里的时候,新的内容自动的被认为是spam。当这个选项启动的时候,在即便不是spam的内容中如果发现了一个spam url,这个内容也会被标记为spam。

以前在同时过滤评论和trackback的时候,spam模块可能已经积累了一些url的信息,所以再次启动时,这一信息再次作为过滤的依据。

不过建议drupal的网站,如果启动trackback,一定要启动spam,不然关于什么 poker和Hold em的广告每分钟几百次的朝你的站点冲击,禁止IP根本不起作用,spam来源的IP似乎是随机分布的。

Blog分类: 

暂时停掉了trackback模块和spam模块

暂时停掉了Trackback模块和Spam模块,停用前者是因为现在网络上的trackback垃圾太多;停用后者是因为虽然spam能杀死所有的trackback垃圾,它同时也误伤了很多有用的评论。Drupal就像一部自动运行的机器,Spam模块通过Beyesian Rule来更新它对spam的辨识,然后cron自动把spam删除,但是在spam变得越来越聪明的时候,它也变得越来越多疑,把一些有用的评论也一并删除了。因为现在的trackback基本上也闲置不用,为了它专门再开启一个Spam模块有些浪费了,况且这个spam模块还有副作用呢?所以一并停之,这个世界也清凉了许多。

Blog分类: 

Drupal的垃圾攻防战:全新的Spam模块和更新的trackback模块

昨天又遭受了一次online poker的垃圾trackback袭击,8月2日经历过一次,那次Spam + Trackback 模块有效的阻止了垃圾trackback,而昨天, spam 和 trackback 去没有阻挡住瞬间上百条的垃圾trackback。因为Spam模块是Drupal核心模块设计的,所以它对组织垃圾留言和Blog内容非常有效,对于trackback,却一直都不支持。但是trackback的垃圾越来越严重,于是有用户更改了trackback,用一种比较笨拙的方式暂时防止了spam的袭击,后来trackback也作了更新,添加了对spam模块的支持。从逻辑上,这是一种颠倒,应该spam模块支持trackback模块才对,而不是颠倒过来,所以这种协作中存在着一个漏洞,而狡猾的垃圾trackback很快就知道该如何钻入这个漏洞,所以就出现了昨天的海量垃圾。

于是查阅解决方式。突然发现Spam模块已经被重新写过,最新的版本是今天才发布的2.0.10,但是这个版本并不在Drupal的总站上,因为Drupal总站发布的模块必须是基于GPL协议的,而新的Spam模块则是基于BSD协议的,不过我们可以在作者的网站找到这个模块。他提供了针对旧模块的数据表的升级脚本,但是我试了一下似乎有bug,升级数据库后,评论总是被全部或是部分的删除,幸好我在升级前备份了数据库,没有损失数据。所以索性彻底删除了旧的Spam模块和相关的数据表,重新安装新的Spam模块,反正原本也没有多少东西在旧的数据表里面。

新的Spam模块功能比先前强大了不少,它甚至可以扫描已有的内容,剔除杂糅其内的垃圾内容。但是美中不足的是它不能直接扫描已有的trackback,为了避免越俎代庖,不过这个版本的spam模块加强了对trackback模块的支持,在先前的几个版本中,还加入了对trackback模块的patch,以使两者能够更好的协作。8月22日,Trackback模块的作者将这个patch添加入他的模块中,所以现在只需要下在cvs版的trackback就可以了,而原先的patch文件也已经从Spam模块的正式下载文江中删除。

呵呵,希望这次可以多抵御一阵子spam的骚扰,道与魔不断的较量着技术手段,我等看热闹的就只好在被魔击中只好快些去道那里领取解药,呵呵,无奈,无奈:)

Blog分类: 

升级Trackback模块到v 1.30(Drupal 4.6)以及相关问题

对Trackback模块最新版本的追求充分体现了“时髦”的代价。Drupal4.5.0推出的时候,Trackback 推出了与之匹配的v1.14,这个版本的问题多多,譬如把trackback和评论混同起来,在每篇blog文章里凭空添加一个多余的"trackback" tab等等,在被多人诟病之后,作者作出了升级,但是这次升级并未作为Drupal 4.5.0的正式版本,正式版本仍然是v 1.14,升级版只是可以从CVS那里下载到,这次升级的最大变动就是数据库结构的更改,因为作者没有把这次升级作为最终升级版,所以并没有提供升级数据库的脚本。当时我为了紧追潮流,立刻升级为CVS,但是由于前后两个数据库的差别非常之大,我就放弃了手动升级数据库(表),而是删除了旧的,直接使用新的,好在当时没有几条Trackback,所以也不是一个问题。

从那以后我紧跟Trackback的CVS,好处是修正了一个又一个小错误,譬如不能直接删除trackback,在没有trackback的时候在blog的摘要下面显示"0 trackback",发送成功后无法显现成功发送的站点等等,终于我跟到了v 1.28,这个v1.28已经支持Drupal 4.6.0,所以就拿来用了 。值得注意的是,从v1.15到v1.28,trackback的数据库结构都没有发生改变。

终于,Trackback推出Drupal 4.6.0的正式版了,第一个版本是v1.29,本来要升级,但是一看,God,数据库结构又变了,正在吃惊之余,v1.30推出了,支持了Spam模块,提供了数据库升级脚本,但是只提供了从v1.14直接升级到v1.30的脚本,并没有其他版本升级的脚本,把俺这个铁杆的粉丝搁在了v1.28,进退两难了, 55~~。

懒了一段时间没去管它,但是想到最终这个问题还是要解决的,还是趁早吧,恰好又看到intertia贴的一条评论,所以花了点功夫把Trackback从v1.28升级到v1.30,主要是数据库的升级,步骤如下:

首先,建立一个Spam_trackbacks表:

CREATE TABLE spam_trackbacks (
trid int(10) unsigned NOT NULL default '0',
rating int(2) unsigned default '0',
spam tinyint(1) unsigned default '0',
last int(11) unsigned default '0',
PRIMARY KEY trid (trid),
KEY rating (rating),
KEY spam (spam),
KEY last (last)
);

然后,在原来trackback_received表格中添加一个新的叫做Status的column(主要是用于设置trackback是否publish):


ALTER TABLE `trackback_received` ADD `status` TINYINT( 1 ) UNSIGNED DEFAULT '0' AFTER `excerpt`

数据库的更改搞定(希望以上就是1.28与1.30数据库不同的地方,如果还有其他的不同,那可要哭死了~~),然后上传新的trackback模块,更改设定,设置spam,blah blah blah。。。按照惯例就行了。 到此搞定一切。

下面是其他几个问题:

首先关于显示最新trackback的block的问题,初步更改如下,主要解决了显示Unpublished的问题,和如何直接显示到Trackback的问题:
$result = db_query_range('SELECT * FROM {trackback_received} where status=1 ORDER BY created DESC', 0, 10);
//添加 status=1
while ($trackback = db_fetch_object($result)) {
echo "

  • $trackback->subject
  • ";
    //添加锚点,但是似乎只在firefox下有效,在IE下没有太大作用
    }
    ?>

    更进一步,这个区块可以用user_access函数来写,更优化一些,另外可以加入发布时间,利用theme函数来进行格式化等等,但是今天没有时间了,只改了最关紧的地方,其他的改天再改进吧。

    Blog分类: 

    评论的Spam和新版的awtag

    Spam真是无所不在,几周前刚被trackback发来的spam整过一次,一下在来了200多条引用,费了我不少的力气,没有想到今天又收到了评论的spam,几十条关于成人用品的,ft。不得不装上了spam.module,看看效果如何。

    另外,awTags模块推出了4.6.0的版本,已经装上了,还不错,可以在这里下载。

    Blog分类: