几种“动网论坛防恶意注册”的方法
方法一: 将reg.asp文件改成其它文件名如reg_new.asp传到论坛目录下面!
然后将reg.asp文件里的内容改成如下内容
<html> <body> <br><br> <p align="center">要注册成为XXXXXXXXXX论坛的用户,请点击“<a href="reg_new.asp">下一步</a>”<br><br><br><br><br><br> 这是做是为了防止某些网络营销软件自动注册而影响到论坛的正常运行! </body> </html>
这样的话,当用户点击reg.asp的时候,必需要点"下一步"才能注册,而网络营销软件不会探测到reg_new.asp的,因为后台模板的代码里根本没有提到reg_new.asp这个真正的注册用户文件!
方法二: 让注册者回答随机问题
显然,这是上个思路的一点改进。至于在效果上是否有区别,还未实践证明。
这里我给出了修改方法。蓝色代码为已存在代码,红色代码是新增加代码。
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)="武则天"
%>
|
方法三:回答指定问题法 reg.asp文件 找到235行-246行的内容 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 在其下面插入 '防止恶意注册添加项 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行处找到 TempLateStr=Replace(TempLateStr,"{$user_belief}",Selectinfo(5)) 在其下面添加一行 TempLateStr=Replace(TempLateStr,"{$Forumname}",Dvbbs.Forum_Info(0)) 然后再看风格处的修改,后台界面风格模板总管理page_login template.html(13)中找到 document.write ('<INPUT type=password maxLength=16 size=30 name=pswc>'); 在其下面插入 document.write ('<TR>'); document.write ('<TD class=tablebody1><B>本论坛的中文名称是什么?</B><BR><font color=red>此条为防止恶意注册必填项!答案:</font><font color=blue>{$Forumname}</font></TD>'); document.write ('<TD class=tablebody1>'); document.write ('<INPUT maxLength=50 size=30 name=Forumname></TD>'); document.write ('</TR>'); 方法四:彻底解决方案-授权注册码方案(较长) 1.后台->login->template.html(13)
红色部分为添加内容
<!--reg.asp##注册资料填写部分 ## Sp3 2005/1/26-->
<script language="JavaScript" src="inc/Mymodify.js"></script>
<FORM name=theForm action=reg.asp?action=save method=post>
<table cellpadding=3 cellspacing=1 align=center class=tableborder1>
<TR align=middle><Th colSpan=2 height=24>新用户注册</TH></TR>
<TR>
<TD width="40%" class=tablebody1>
<B>用户名</B>:<BR>注册用户名长度限制为{$NameLimLength}-{$NameMaxLength}字节</TD>
<TD width="60%" class=tablebody1><INPUT maxLength="{$NameMaxLength}" size=30 name=name value={$name}></TD>
</TR>
……
<TR>
<TD class=tablebody1><B>Email地址</B>:<BR>请输入有效的邮件地址,这将使您能用到论坛中的所有功能</TD>
<TD class=tablebody1>
<INPUT maxLength=50 size=30 name=e_mail value={$e_mail}><input type=button value='检测帐号' name=Button onclick="gopreview()"></TD> </TR>
<TR>
<TD class=tablebody1><B>注册授权码</B>:<BR>请输入与邮件地址对应的授权码,如果未取得注册授权码,请点击“获取授权码”来取得注册授权码</font></TD>
<TD class=tablebody1>
<INPUT maxLength=50 size=30 name=e_id value={$e_id}><input type=button value='获取授权码' name=Button onclick="gochkid()"></TD>
</TR>
</table>
………
<form name=preview action=reg.asp?t=1 method=post target=preview_page>
<input type=hidden name=username value=><input type=hidden name=email value=>
</form>
<form name=chkid action=chkid.asp method=post target=preview_page>
<input type=hidden name=username value=><input type=hidden name=email value=>
</form> 2.后台->login->添加template.html(25),内容:
<p>
<table cellpadding=3 cellspacing=1 align=center class=tableborder1>
<TR align=middle> <Th height=24>授权注册码发送情况</Th></TR>
<TR> <Td class=tablebody1 height=24>{$Reportmsg}</TD></TR>
</TABLE> 3.后台->login->添加template.html(26),内容:
<!--reg.asp##授权码发送邮件-->
<html>
<title>授权注册码信息</title>
<body>
<TABLE border=0 width='95%' align=center><TBODY><TR>
<TD valign=middle align=top>
{$username},您好:<br><br>
欢迎您注册本论坛,我们将提供给您最好的论坛服务!<br>
下面是您的注册授权信息:<br>
注 册 名:{$username}<br>
注 册 邮 箱:{$e_mail}<br>
注册授权码:{$e_id}<br>
<br><br>
请点击<a href=http://www.mjtd.com/bbs/reg.asp?action=apply&name={$username}&e_mail={$e_mail}&e_id={$e_id}><font color=red><b>继续注册</b></font></a>并填写其它相关内容以成为正式会员:<br>
<br><br>
<center><font color=red>再次感谢您注册本系统,让我们一起来建设这个网上家园!</font>
</TD></TR></TBODY></TABLE><br><hr width=95% size=1>
<p align=center>{$copyright} {$version}</p>
</body>
</html> 4.reg.asp的Sub reg_2()中
Sub reg_2() Dim grouploopinfo,TempLateStr,Rs Dim uname,uemail,ueid
uname=request("name")
uemail=request("e_mail")
ueid=request("e_id")
TempLateStr=template.html(13) …… TempLateStr=Replace(TempLateStr,"{$user_education}",Selectinfo(3)) TempLateStr=Replace(TempLateStr,"{$user_character}",Selectinfo(4)) TempLateStr=Replace(TempLateStr,"{$user_belief}",Selectinfo(5)) if uname<>"" then TempLateStr=Replace(TempLateStr,"{$name}",uname)
if uemail<>"" then TempLateStr=Replace(TempLateStr,"{$e_mail}",uemail)
if ueid<>"" then TempLateStr=Replace(TempLateStr,"{$e_id}",ueid)
TempLateStr=Replace(TempLateStr,"{$name}","")
TempLateStr=Replace(TempLateStr,"{$e_mail}","")
TempLateStr=Replace(TempLateStr,"{$e_id}","")
Response.Write TempLateStr End Sub 5.reg.asp的 Reg_3()中
… If IsValidEmail(Trim(Request.form("e_mail")))=false Then ErrCodes=ErrCodes+"<li>"+template.Strings(30) Else If not Isnull(Dvbbs.Forum_Setting(52)) and Dvbbs.Forum_Setting(52)<>"" and Dvbbs.Forum_Setting(52)<>"0" Then Dim SplitUserEmail SplitUserEmail=Split(Dvbbs.Forum_Setting(52),"|") For i=0 to Ubound(SplitUserEmail) If Instr(Request.form("e_mail"),SplitUserEmail(i))>0 Then ErrCodes=ErrCodes+"<li>"+template.Strings(31) Exit Sub End If Next End If useremail=Dvbbs.CheckStr(Trim(Request.form("e_mail"))) End If 后加上: 'mjtd.com add begin
If Request.form("e_id")="" Then
ErrCodes=ErrCodes+"<li>"+template.Strings(50)
Else
If trim(Request.form("e_id"))<>md5(useremail & username & IdPlus,16) Then
ErrCodes=ErrCodes+"<li>"+template.Strings(51)
end if
End If
'mjtd.com add end
6.inc/mymodify.js的最后加上: function gochkid()
{
document.chkid.username.value=document.theForm.name.value;
document.chkid.email.value=document.theForm.e_mail.value;
var popupWin = window.open('', 'preview_page', 'scrollbars=yes,width=500,height=300');
document.chkid.submit()
}
7.增加文件chkid.asp,用于检测及发送授权码。文件内容如下:
<!-- #include file="conn.asp" --> <!-- #include file="inc/const.asp" --> <!-- #include file="inc/chkinput.asp" --> <!-- #include file="inc/md5.asp"--> <!-- #include file="inc/Email_Cls.asp"--> <% Dvbbs.LoadTemplates("login") Dim Stats,ErrCodes,TempLateStr Dim username,i,sql,Rs,useremail Dim mailbody,sendmsg,topic Dim e_id Stats=split(template.Strings(25),"||") Dvbbs.Stats=Stats(0) dvbbs.head() ErrCodes="" If Request.form("username")="" Then ErrCodes=ErrCodes+"<li>"+template.Strings(6) If strLength(Request.form("username"))>Cint(Dvbbs.Forum_Setting(41)) or strLength(Request.form("username"))<Cint(Dvbbs.Forum_Setting(40)) Then TempLateStr=template.Strings(28) TempLateStr=Replace(TempLateStr,"{$RegMaxLength}",Dvbbs.Forum_Setting(41)) TempLateStr=Replace(TempLateStr,"{$RegLimLength}",Dvbbs.Forum_Setting(40)) ErrCodes=ErrCodes+"<li>"+TempLateStr TempLateStr="" Else username=Dvbbs.CheckStr(Trim(Request.form("username"))) If Instr(username,"=")>0 or Instr(username,"%")>0 or Instr(username,chr(32))>0 or Instr(username,"?")>0 or Instr(username,"&")>0 or Instr(username,";")>0 or Instr(username,",")>0 or Instr(username,"'")>0 or Instr(username,",")>0 or Instr(username,chr(34))>0 or Instr(username,chr(9))>0 or Instr(username,"")>0 or Instr(username,"$")>0 Then ErrCodes=ErrCodes+"<li>"+template.Strings(46) End If Dim RegSplitWords RegSplitWords=split(Dvbbs.forum_setting(4),",") for i = 0 to ubound(RegSplitWords) If instr(username,RegSplitWords(i))>0 Then ErrCodes=ErrCodes+"<li>"+template.Strings(46) End If next End If If Request("action")="" Then If IsValidEmail(trim(Request.form("email")))=false then ErrCodes=ErrCodes+"<li>"+template.Strings(30) Else useremail=Dvbbs.checkStr(Request.form("email")) End If End If If ErrCodes<>"" Then Showerr() if ErrCodes="" then If cint(Dvbbs.Forum_Setting(24))=1 Then If Request("action")="" Then sql="select username,useremail from [Dv_user] where username='"&username&"' or useremail='"&useremail&"'" Else sql="select username,useremail from [Dv_user] where username='"&username&"'" End If Else sql="select username,useremail from [Dv_user] where username='"&username&"'" End If Set Rs=Dvbbs.execute(sql) If Not rs.eof and not rs.bof then If cint(Dvbbs.Forum_Setting(24))=1 And Rs("useremail")=useremail Then If Request("action")="" Then ErrCodes=ErrCodes+"<li>"+template.Strings(44) Else ErrCodes=ErrCodes+"<li>"+template.Strings(43) End If Else ErrCodes=ErrCodes+"<li>"+template.Strings(44) End If End If If ErrCodes<>"" Then Showerr() Rs.close:Set Rs=Nothing End If
If ErrCodes="" Then e_id = md5(useremail & username & IdPlus,16) If Dvbbs.Forum_Setting(47)=1 Then on error resume next '发送注册邮件 Dim getpass topic=Replace(template.Strings(35),"{$Forumname}",Dvbbs.Forum_Info(0)) If cint(Dvbbs.Forum_Setting(23))=1 Then getpass=Dvbbs.htmlencode(rndnum) Else getpass=Dvbbs.htmlencode(Request.form("psw")) End If mailbody = template.html(26) mailbody = Replace(mailbody,"{$username}",Dvbbs.HtmlEncode(username)) mailbody = Replace(mailbody,"{$e_mail}",useremail) mailbody = Replace(mailbody,"{$e_id}",e_id) mailbody = Replace(mailbody,"{$copyright}",Dvbbs.Forum_Copyright) mailbody = Replace(mailbody,"{$version}",Dvbbs.Forum_Version)
Dim DvEmail Set DvEmail = New Dv_SendMail DvEmail.SendObject = Cint(Dvbbs.Forum_Setting(2)) '设置选取组件 1=Jmail,2=Cdonts,3=Aspemail DvEmail.ServerLoginName = Dvbbs.Forum_info(12) '您的邮件服务器登录名 DvEmail.ServerLoginPass = Dvbbs.Forum_info(13) '登录密码 DvEmail.SendSMTP = Dvbbs.Forum_info(4) 'SMTP地址 DvEmail.SendFromEmail = Dvbbs.Forum_info(5) '发送来源地址 DvEmail.SendFromName = Dvbbs.Forum_info(0) '发送人信息 If DvEmail.ErrCode = 0 Then DvEmail.SendMail useremail,topic,mailbody '执行发送邮件 If DvEmail.Count>0 Then sendmsg=template.Strings(52) Else sendmsg=template.Strings(49) End If Else sendmsg=template.Strings(49) End If Set DvEmail = Nothing
Else sendmsg = template.Strings(48) End If ErrCodes = Replace(sendmsg,"{$e_id}",e_id) Response.Write Replace(template.html(25),"{$Reportmsg}",ErrCodes) End If Call Dvbbs.footer()
'显示错误信息 Sub Showerr() Dim Show_Errmsg If ErrCodes<>"" Then Show_Errmsg=Dvbbs.mainhtml(14) ErrCodes=Replace(ErrCodes,"{$color}",Dvbbs.mainSetting(1)) Show_Errmsg=Replace(Show_Errmsg,"{$color}",Dvbbs.mainSetting(1)) Show_Errmsg=Replace(Show_Errmsg,"{$errtitle}",Dvbbs.Forum_Info(0)&"-"&Dvbbs.Stats) Show_Errmsg=Replace(Show_Errmsg,"{$action}",Dvbbs.Stats) Show_Errmsg=Replace(Show_Errmsg,"{$ErrString}",ErrCodes) End If Response.write Show_Errmsg End Sub %>
8.在conn.asp文件的Startime = Timer()前加上:
Const IdPlus = "mjtd.com"
其中mjtd.com可更换为任意字符。 9.模板->分页模板(page_login)->语言包 中添加 template.Strings(48): <li>系统未开启邮件功能,请记录下你的授权注册码:<b>{$e_id}。</b></li> template.Strings(49): <li>由于系统错误,给您发送的授权注册码未成功,请记录下你的授权注册码:<b>{$e_id}。</b></li> template.Strings(50): 请输入授权注册码,如未获取,请点击获取授权注册码。 template.Strings(51): 授权注册码必须与用户名和邮件地址相对应的,请填写与用户名及邮件地址相对应的号码。 template.Strings(52): <li>您的授权注册码已经发往您的邮箱,请注意查收。</li> 该方法将用户名和用户邮箱以及自定义的一个字符串进行加密运算形成了授权注册码,而自定义字符串用户可按照自己网站进行修改。所以不可能会被破的。 |
|