评论对象: 东方不败 | 2008/9/18 15:31:20
评论言论:
几种“动网论坛防恶意注册”的方法
方法一: 将reg.asp文件改成其它文件名如reg_new.asp传到论坛目录下面! 方法二: 让注册者回答随机问题 方法三:回答指定问题法 reg.asp文件 找到235行-246行的内容 在其下面插入 2、114行处找到 在其下面添加一行 然后再看风格处的修改,后台界面风格模板总管理page_login template.html(13)中找到 document.write ('<INPUT type=password maxLength=16 size=30 name=pswc>'); 在其下面插入 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()
}
然后将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)="武则天"
%>
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
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
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>');