防止论坛群发软件的方法
一、更正验证码的易破解性
之前不论在7.0和7.1中,验证码都存在着缺陷,可以通过程序自动识别出验证码上的数字,于是没有真正起到验证码的作用。我们可以在注册时设置使用验证码,再按照以下方法修改。验证码文件是Dv_GetCode.
ASP(7.1中)
找到这段代码:
If Rnd * 99 + 1 < cOdds Then ' 随机生成杂点
Response.BinaryWrITe vColorData(0)
Else
将其改为
If Rnd * 99 + 1 < cOdds Then ' 随机生成杂点
If Mid(vNumberData(vCode(ii)), i * 10 + iii, 1) Then
Response.BinaryWrite vColorData(0)
Else
Response.BinaryWrite vColorData(1)
End If
Else
另外,找到以下代码
Const cOdds = 2 ' 杂点出现的机率
把2设置的稍大一些,建议设置为5~10。
以上部分的修改已经被很多实践证明效果很不明显。假如你有耐心,可以再试用手工修改验证码图片的方法(因麻烦故不推荐),这个一定有效果!如下:
这里我给出了一个自己做验证码的方法,里面有说明。
点击浏览该文件 这个是另一个朋友提供的验证码工具:[URL=http://bbs.dvbbs.net/d
ISPbbs.ASP?boardID=8&ID=958224&page=1]
http://bbs.dvbbs.net/dispbbs.asp?boardID=8&ID=958224&page=1[/url] 使用7.0的用户可以用7.1的这个文件覆盖原来的。如果你修改了验证码的图片,可以不再考虑杂点的问题。
二、更改提交表单的元素属性
此方法为“研究动网”朋友提出来的。它可以在不用验证码系统的条件下对付群发软件。
在论坛注册页面,用户名,密码文本框的 name属性分别默认为name和psw。我们可以修改其属性达到限制软件注册的效果。
具体方法如下,7.0和7.1均适用:
进入后台,风格界面模板总管理 / 分页面模板(page_login) / 界面风格 / template.HTML(13)
找到 <INPUT maxLength="{$NameMaxLength}" size=30 name=name>
将粉色的name改为其他值,比如改成 “name1”
然后打开reg.asp,以关键词REQuest.form("name")进行搜索
将其全部替换为Request.form("name1")
当然那个name1就是刚才你在风格模板里改的值
三、设置注册延时
设置新注册用户不能发帖,要一分钟或更多的时间后才能发帖。这样可以在一定程度上抵制非注册软件的攻击。但是对注册了的软件没有作用。
四、设置至少要有一个中文字符注册
这个方法并不太好,因为很多人实际上都比较喜欢用纯英文名。但是有不少朋友提出这个想法,这里还是列出在7.0和7.1里面的修改方法吧:
reg.asp文件,在蓝色代码
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 or Instr(username,"|")>0 Then
Dvbbs.AddErrCode(19)
Exit sub
End If
下添加以下红色代码
Dim IsCHName
IsCHName = False
For i = 1 To Len(UserName)
If Asc(Mid(UserName, i, 1)) < 0 Then
IsCHName = True
Exit For
End If
Next
If Not IsCHName Then
Response.redirect "showerr.asp?ErrCodes=<li>请至少输入一个中文字符。&action=OtherErr"
End If
五、修改注册页面的地址
首先将论坛根目录下的reg.asp改名,比如改成reg1.asp,然后进入后台 / 风格界面模板总管理
在main_Style,Page_Login的“界面风格”中搜索“reg.asp”(注意7.0中不要把chkreg.asp替换了),全部替换成比如“reg1.asp”
六、注册时添加一项必答选项,填写论坛名称
一、修改reg.asp
1、找到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 tlm
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)中找到
<INPUT type=text size=30 name=answer>
</TD></TR>
在其下面插入
<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>