收藏本页
切换浏览模式

华夏网·艺术论坛站务管理服务大厅 → 查看评论

帖子评论信息
评论主题: [分享]动网论坛防止恶意注册的几个方法
评论对象: 东方不败 | 2008/9/18 15:31:20
评论言论:

几种“动网论坛防恶意注册”的方法

方法一:

将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} &nbsp;&nbsp; {$version}</p>

</body>

</html>

4.reg.aspSub 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

6inc/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>

该方法将用户名和用户邮箱以及自定义的一个字符串进行加密运算形成了授权注册码,而自定义字符串用户可按照自己网站进行修改。所以不可能会被破的。


反对方

支持方

反对方人数(0
支持方人数(0

中立方

中立方人数(0
Copyright ©2004 - 2020 cnrr.cn
Powered By Dvbbs Version 8.0.0
页面执行时间 0.11328 秒, 9 次数据查询