设为首页收藏本站

昆仑易

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1793|回复: 2
打印 上一主题 下一主题

刘老师请看,关于论坛恶意注册发帖的事件的建议

[复制链接]
跳转到指定楼层
楼主
发表于 2008-11-24 12:06:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

动网论坛对付群发软件注册.防止垃圾广告

升级到dvbbs7.1sp1以后,据反应,还有很多论坛遭到诸如暴力营销软件的骚扰。目前论坛是采用增强验证码和审核机制来限制群发。无疑,审核是针对已注册帐号的群发。既要让正常用户发帖,要要阻止软件利用已存在帐号群发,绝对是个难题。这里我只讨论如何有效阻止群发软件的注册。

预计使用此法后,不会再有“自动注册机”得逞。群发软件作者将会把重心转移到利用已存在的帐号上。

一、使用增强的验证码

这是一个比较正式使用比较广泛的做法。将你联想到手机强大的手写识别功能后,你就会对这种方法的可*性提出怀疑。但是如何更好地增大软件的识别难度,仍是大家努力的方向。

二、让注册者回答固定问题

软件能识别验证码,但是绝对不会识别诸如以下文字:“请回答三加二等于几,用英文表示”。人工智能还达不到这种水平。基于这种思路,我们就可以让注册者回答问题。但这个问题绝对不要写成:“请回答本论坛的名字”,“今天是星期几”,“请复制以下文字”之类的易破解问题。你可以考虑让用户回答与论坛有关的话题。假设你的论坛是讨论金庸的。你可以这样说:“为证明你是一个金庸迷,请回答以下问题:《射雕英雄传》的东邪西毒南帝北丐中,西毒是谁”。

我这里只给出了思路,由于时间关系,还没有写相应的实现代码。如果大家支持本帖,我会在下次补上。当然也希望热心人把修改方法提供给大家。

三、让注册者回答随机问题

显然,这是上个思路的一点改进。至于在效果上是否有区别,还未实践证明。

这里我给出了修改方法。蓝色代码为已存在代码,红色代码是新增加代码。

1. 进入后台,风格界面模板总管理,page_login,template.html(13)

<TR>
<TD class=tablebody1><B>密码问题</B>:<BR>忘记密码的提示问题</TD>

在此两句上面添加如下代码

<TR>
<TD class=tablebody1>
<div style="color:red"><b>反论坛群发必填项:</b></div>
<div>为了防止群发软件的恶意注册,</div>
<div>请回答以下问题</div>
<div style="color:blue;font-size=18px"><b>{$EvilQuesion}<b></div>

</TD>
<TD class=tablebody1><INPUT size=30 name=evilanswer> </TD>
</TR>

2. 打开reg.asp,找到
<!--#include file="inc/md5.asp"-->
在其下添加
<!--#include file="inc/CheckEvil.asp"-->
找到
TempLateStr=Replace(TempLateStr,"{$user_belief}",Selectinfo(5))
在其下添加
Randomize
Session("EvilID")=int(Rnd*QuesionNum)
TempLateStr=Replace(TempLateStr,"{$EvilQuesion}", QuesionArray(Session("EvilID")))

找到
Else
quesion=Request.form("quesion")
End If
在其下添加
If Request.Form("EvilAnswer")="" Then
ErrCodes=ErrCodes "<li>" "请填写防恶意注册问题!"
End If

If Not CheckEvil(Request.Form("EvilAnswer")) Then
ErrCodes=ErrCodes "<li>" "防恶意注册问题回答错误,请返回重试。"
End If

3. 增加一个新文件CheckEvil.asp,填写如下代码,并上传到论坛inc目录下,即 /inc/CheckEvil.asp。
<%
Dim QuesionArray(100)
Dim AnswerArray(100)
Dim QuesionNum
QuesionNum=5 '请在这里正确设置问题的总数


Function CheckEvil(Answer)
Dim TrueAnswer
If Session("EvilID")="" Then
CheckEvil=False
Exit Function
End If
TrueAnswer=CStr(AnswerArray(Session("EvilID")))
If Answer=TrueAnswer Then
CheckEvil=true
End If

End Function

QuesionArray(0)="12的平方是多少?(数字)"
AnswerArray(0)="144"
QuesionArray(1)="中国最长的河流叫什么名字?"
AnswerArray(1)="长江"
QuesionArray(2)="“举头望明月”的下句是什么?(提示:低头??乡)"
AnswerArray(2)="低头思故乡"
QuesionArray(3)="“举头望明月”的下句是什么?(提示:低头??乡)"
AnswerArray(3)="低头思故乡"
QuesionArray(4)="中国史上唯一的女皇是谁?(提示:武?天)"
AnswerArray(4)="武则天"

%>

 

 

方法二:

http://bbs.dvbbs.net/dispbbs.asp?boardid=8&id=1172071

这是我第二次发的方法,也可以参考一下:http://bbs.dvbbs.net/dispbbs.asp?BoardID=8&ID=1071122。现在仍然适用,是除人工审核以外的最可*的方法。但是让注册者回答问题显得不太正式,所以有必要找一种能够自动拦截“注册机”的办法。一般的“注册机”都是通过HTML客户端代码关键词找到Post的内容,那么我们只要构造复杂的客户端代码就可以骗住大多数的“注册机”。这在很早之前我就提出来过了,但是一直没有写出来 ,因为这没有个统一的代码,一公布出来就不“灵”了。只能够每个人自己自由发挥。

这次我仍然没有给出统一的修改方法,以下只是一个简单的示例。大概思想就是利用Javascript或Vbscript脚本构造尽可能复杂的客户端代码。可以到网上去搜索一下javascript加密等。要完美破解这种“复杂Javascript”,就只有编写出Javascript编译程序。显然这是相当困难的。

再强调一下,下面只是一个示例而已,不可照搬!懂一些Javascript的朋友可以参考着自己写。

1、 在 后台/风格界面模板总管理/分页面模板(page_login)/界面风格/template.html(13)

中,找到

QUOTE:
document.write ('<INPUT type=password maxLength=16 size=30 name="{$pswc}">');
document.write ('</TD></TR>');

在其下添加以下代码:

QUOTE:
var zr_Str = "坚决打击论坛注册机";
var zr_Num = "";
for(var i = 0; i < zr_Str.length; i ) {
zr_Num = zr_Str.charCodeAt(i).toString();
}
var zr_a = ((24237 ^ 53453) % 30);
var zr_b = Math.floor(Math.sin(7.77) * 10);
document.write ('<input type="hidden" name="QWZR" value=' zr_Num.substr(zr_a, zr_b) ' />');

2、在/reg.asp中,
找到

QUOTE:
Dim RegSplitWords
If Trim(Dvbbs.cachedata(1,0))<>"" Then

将其改为

QUOTE:
If Request("QWZR") <> "632788020" Then
'====可以在此写一些日志记录,看看有多少人中招====
Response.redirect "showerr.asp?ErrCodes=<li>您正在试图使用论坛注册机非法注册。&action=OtherErr"
End If
Dim RegSplitWords
If Trim(Dvbbs.cachedata(1,0))<>"" Then

上面代码中,最重要的就是那个“632788020”了,“注册机”又怎么会轻易破解出这个数来呢?

测试方法,将这个字符串随便改一改,尝试注册一个用户,看有没有“您正在试图使用论坛注册机非法注册”的提示。

 

方法三:

http://bbs.dvbbs.net/dispbbs.asp?boardid=8&id=1416955

此方法的优点为 只需在原有全局include 的asp文件的基础上添加代码 通过FTP上传即可 在代码中实现自动判断当前所访问的文件名

以下单独加于conn.asp 或其它include的文件内都可
蓝色部分为定义注册页面
绿色部分为定义注册前必须访问的页面
此方法经本人半年来在多个论坛试验通过 99.9%可防止注册机的攻击~~~~

<%
'-------针对信息产业局服务器一流信息监控的动网防广告代码
'--------------2007-03-31
'责任添加:秋色烽火
'说明:防注册机核心检测代码
'--检测当前是否访问reg.asp 即进行注册的相关操作
If server.mappath(Request.ServerVariables("SCRIPT_NAME")) = Server.MapPath("reg.asp") Then
'判断Session对象是否被赋值
If Session("AllowReg") <> 1 Then
Response.Write("<script language=""javascript"">" & VbCrLf)
Response.Write("<!--" & VbCrLf)
Response.Write("alert (""论坛启用了新防注册机机制,给你带来的不便敬请原谅!"");" & VbCrLf)
Response.Write("alert (""注册前请先浏览论坛最顶部的论坛公告!"");" & VbCrLf)
Response.Write("window.location.href = ""index.asp"";" & VbCrLf)
Response.Write("// ->" & VbCrLf)
Response.Write("</script>" & VbCrLf)
Response.End
End if
End if

'检测是否在查看公告页面
If server.mappath(Request.ServerVariables("SCRIPT_NAME")) = Server.MapPath("announcements.asp") Then
If Session("AllowReg") <> 1 Then
Session("AllowReg") = 1
End if
End if

'附上公告内容
'<font color="#FF0000">[公告]注册前请先查看本公告! </font>
'本坛启用了新的防注册机机制 需要注册的用户请先点击查看本公告 阅后即能正常进行注册操作!!
'本次安全更改由秋色烽火友情操作,不当之处 望站长见谅!!! 此后基本99%以上的广告群发机都没效的了!!!
'--------------------------------
%>


<!--#include file="Conn.asp"-->
<!-- #include file="inc/const.asp" -->
<!--#include file="inc/dv_clsother.asp"-->
<!--#include file="inc/dv_ubbcode.asp"-->
<!--#include file="inc/ubblist.asp"-->
通用代码均可选择加在以上任意一个文件中

上面是本人在一次安全检测某装有一流信息监控的主机时 积累出来的防注册机通用方法~~~

一般我是将红色部分放到 conn.asp 最底部 %> 后边的

这样每个注册的用户都必须访问一次公告后才能注册~~~

当然了 如果再有高手修改一下的话 可以检测

http://bbs.dvbbs.net/dispbbs.asp?boardID=8&ID=1414198&page=3

dispbbs.asp 传过来的 boardID 值 和 ID

这样就可以实现必须访问某一固顶帖才能注册的功能 当然对于那种广告注册机的循环 两层for的访问就无效了 不过应该也不会这样NB到http://bbs.dvbbs.net/dispbbs.asp?boardID=一层循环&ID=二层循环&page=3

 

方法四:

http://bbs.dvbbs.net/dispbbs.asp?boardid=8&id=1089151

合理的利用论坛等级,使群发广告无帖可击!
在论坛注册用户等级第一级里。把最少发帖设置为0。

图片点击可在新窗口打开查看此主题相关图片如下:
图片点击可在新窗口打开查看

进编辑里:

在发帖权限----可以发布新主题 这栏 改为否


图片点击可在新窗口打开查看此主题相关图片如下:
图片点击可在新窗口打开查看

修改成否。

把第二注册用户等级设置里的 最少发帖设置为:1


图片点击可在新窗口打开查看此主题相关图片如下:
图片点击可在新窗口打开查看

这样的话。

新注册用户只要在第一次回复一个帖子。就可以发帖了。

群发软件一般都是注册之后,直接发广告帖,这样可以严重打击他们。

 

方法五:

http://bbs.dvbbs.net/dispbbs.asp?boardid=8&id=1009005


因为好多朋友经常受此垃圾软件的困扰,心跳将自己的方法发上来供大家参考,以下方法只要将代码加在适当位置同样适用于7.0版本。

先看程序(以动网官方Dvbbs7.1.0_Ac[2005.07.04]最新的reg.asp文件为准)

1、找到235行-246行的内容

QUOTE:
If Request.form("quesion")="" Then
ErrCodes=ErrCodes "<li>" template.Strings(11)
Else
quesion=Request.form("quesion")
End If
If Request.form("answer")="" Then
ErrCodes=ErrCodes "<li>" template.Strings(11)
ElseIf Request.form("answer")=Request.form("oldanswer") Then
answer=Request.form("answer")
Else
answer=md5(Request.form("answer"),16)
End If

在其下面插入

QUOTE:
'防止恶意注册添加项 by xintiao
If Request.form("Forumname")="" Then
Response.redirect "showerr.asp?ErrCodes=<li>您没有回答“防恶意注册问题答案”!&action=OtherErr"
Else
If Request.form("Forumname")<>Dvbbs.Forum_Info(0) Then
Response.redirect "showerr.asp?ErrCodes=<li>请回答正确的“防恶意注册问题答案”!&action=OtherErr"
End If
End If

2、114行处找到

QUOTE:
TempLateStr=Replace(TempLateStr,"{$user_belief}",Selectinfo(5))

在其下面添加一行

QUOTE:
TempLateStr=Replace(TempLateStr,"{$Forumname}",Dvbbs.Forum_Info(0))

然后再看风格处的修改,后台界面风格模板总管理page_login template.html(13)中找到

QUOTE:
<INPUT type=text size=30 name=answer>
</TD></TR>

在其下面插入

QUOTE:
<TR>
<TD class=tablebody1><B>本论坛的中文名称是什么?</B><BR><font color=red>此条为防止恶意注册必填项!答案:</font><font color=blue>{$Forumname}</font></TD>
<TD class=tablebody1>
<INPUT maxLength=50 size=30 name=Forumname></TD>
</TR>

至此结束,可以和那些恶意注册的垃圾暴力营销说拜拜了。

 

 

 

 

 

[此贴子已经被作者于2008-11-24 12:09:15编辑过]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 支持支持 反对反对
回复

使用道具 举报

沙发
发表于 2008-11-24 12:20:16 | 只看该作者
谢谢,非常感谢您对本站的支持!
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2008-11-24 13:18:22 | 只看该作者
以后让互动多起来,这个网站就真正壮大了。有要求老师帮忙的多反馈就好。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|昆仑易 ( 冀ICP备12001988号 )  

冀公网安备 13010202001550号

GMT+8, 2024-11-24 03:07 , Processed in 0.186212 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表