给公司刚刚开发了企业网站,为了方便和访客交流,写了一个留言板,很简单的留言板,用户名,电子邮箱,一个单选框,还有用户的留言,客户端检查用户是否登录,采用的检验session是否为空来判断,如果登录就可留言,如果未登录,则提示登录,提交时客户端检验用户名是否为空,留言内容是否为空,电子邮件是否合法,一切检查都通过后,将表单提交给下一个页面,下一个页面的功能也就是把接收到的信息保存到数据库。

一开始运行很正常,后来突然发现留言板有许多垃圾留言,后来发现频繁的时候每隔五十分钟左右就发一条,全是英文的,中间还夹杂着一些网址。用户名还有一些乱码。想想,应该不是人为留言,好像是专门的发帖软件。那要解决了。

首先,给提交页面添加验证码,这样功能不是很强大的发帖软件就会因为无法识别验证码而发帖失败。结果,这个软件还是比较强大的,突破了我的第一道防线。

再来,增加发帖时间限制,一个cookie24小时之内只能发一条,在保存的页面添加如下代码:

<%if request.cookies("postnum")="" then
response.cookies("postnum")=1
response.cookies("postnum").expires=DateAdd("h", 24, Now())
else
response.cookies("postnum")=request.cookies("postnum")+1
end if
if request.cookies("postnum") > 1 then
response.write "<SCRIPT language=JavaScript>alert('今天留言次数超过限制,禁止留言!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if%>

结果,失败,它还是可以发上去。挺厉害的嘛。

下一步怎么办,我先看看是谁发的吧,在数据库表里增加一个ip字段,在保存的页面,我增加了如下一句代码:
rs("ip") = Request.ServerVariables("REMOTE_ADDR") ,这样,就能获得提交留言机器所在的ip。获取到一看,希腊。怎么回事呢。好了也不管怎么回事了,问题是怎么解决。

好了,既然知道ip了,那就索性给你来个转向。在保存页面的一开始,就加入如下代码:
<%
if Request.ServerVariables("REMOTE_ADDR")="*.*.*.*" then
response.Redirect"http://www.baidu.com"
else%>
也就是当它一提交,程序就会首先检验它的ip是多少,如果是这个ip,那么页面会马上转到百度首页,下面的update()等程序就不执行了。

等了一个小时,两个小时,三个小时,垃圾留言没再出现,好,解决啦。

想想自己这个办法有点太“菜”了,呵呵,不过总归解决问题了,有更好方法的朋友可以拿出来,和大家分享下。