程序员周记(2):防恶意注册之人机大战

站长空间

2007年 2月 28日 晴

公司架构的论坛在一个星期内已经达到每天500多新用户注册、每天500多主题帖子了!

500个人500个帖子?是的,没错,一个人一个帖子,我也正为这件事情发愁呢。这500多新用户全是自动注册广告机的杰作,注册的用户名全是随机拼凑的杂乱字符串,如果不是听到头儿在身后的冷笑,我会以为我身在火星。

“小王,三天之内,如果你不能改变一人一个帖子的现状,哼哼!”头儿很生气,后果果然很严重。

“关键时刻用我帮忙吗?”小林探出脑袋,“我有一个馊主意可以很快帮你实现头儿的要求。”我期望地看着他:“说说看。”“我也用广告机来注册,不过我只注册用户名,不发广告帖子,这样新用户和帖子的比例就不会是1∶1了。”馊主意果然没有一个是不馊的!小林没等我回话,就嘻笑着把脑袋缩了回去。

看来一切只能靠自己了。难不成我手工检索论坛中正常的注册和帖子,手工完成对非正常帖子的删除工作?这显然又是一个馊主意。

治标不行还是要从根本上考虑:自动注册广告机的工作原理并不复杂,它就是通过软件模拟正常的论坛注册发帖过程,将相应的数据传递给论坛,完成一个广告的发布。也就是说,只要它知道你使用论坛的工作规则、传递的参数命名等就可以有的放矢地模拟。虽说大多数论坛都开启了随机注册码功能,但是由于目前网上架设的论坛无外乎那么几大类,现在的广告机都增加了针对这几类论坛的注册码图片OCR识别的功能,使得注册码形同虚设了,广告机的开发人员只要针对这几类论坛做一些设置,就可以应付绝大多数的论坛。

那么我如果对这个传递过程稍加修改,不就能使软件的模拟失败吗?我修改论坛注册部分的源代码,增加一个注册验证的参数,通用的广告机就会成为废物——它可不知道“天王盖地虎”的下句是什么。哈哈,想到做到,我先在论坛的注册页面增加了“<input type="text"name=" regtxt">天王盖地虎下句是什么”这行代码,然后在进行判断和注册的部分增加了 “regtxt=HTMLEncode(Request.Form("regtxt"))”“if regtxt <>"宝塔震河妖" then response.redirect"error.htm "”大功告成,真是一行代码救了英雄汉呀。我仔细想想,其实还有其他的办法,我们可以让来注册的用户做一道简单的随机算术题,如果做对了才允许注册。注册页面改为“<%Randomize

Session("num1")=INT(10*RND)

Session("num2")=INT(10*RND)%>

<input type="text" name="regtxt"><%=Sess ion("num1")%>+<%= Session("num2)%>是多少?”

判断注册页面改为“if regtxt<> Session("num1")+Session("num2") then response.redirect"error.htm "”

哈哈,简直太完美了,我终于又活过来了!