现在,越来越多的灌水机被使用到网络上,有的是为了发送广告本身,有的则是为了制作反向链接,这种机器会自动到搜索引擎中搜索留言本等可以发布信息的地方,然后向表单提交广告信息。
大部分人使用验证码的方法来防止垃圾信息的侵入,但是这种方法让访问者的感受大打折扣。为了防止灌水机而让所有真的需要留言给你的人痛苦不堪,那不是好办法。
最近想了一个办法与大家分享。一般情况下,用户到你的留言本留言的过程是:
1、从首页或者栏目页或者文章页点击连接进入留言本页面
2、从留言本页面进入发表留言页面
3、填写并提交留言
我们看到,用户直接POST数据给最终处理数据的程序(比如叫 add.asp )的可能性为零,
就是说,如果从 add.asp 中无法得到来路,则一定是灌水机无疑。
我们还注意到,用户从进入填写留言的页面,到点击提交按钮,这之间是一定有时间的,因为用户需要打字,如果灌水机模拟了类似上面2→3这样的访问,他一般不会等待这个时间。
所以,我用下面的方法判断灌水机:
1、当用户进入填写留言的页面时,记住当时的时间。
2、在处理用户提交数据的程序中,先判断是否有来路信息,没有来路信息的一定是垃圾信息。
3、如果有来路信息,则判断用户进入【留言填写页面】时的时间和现在的时间的时间差,如果太小,则仍然判断为垃圾信息。
顺便记录下阿江的“不用验证码实现留言本不被广告机器强奸”一点ASP代码
<script language="Javascript">
<!--
time_start= new Date(); //页面开始时间
function stay() {
time_end = new Date(); //页面结束时间
minutes = (time_end.getMinutes() - time_start.getMinutes());
seconds = (time_end.getSeconds() - time_start.getSeconds());
time = (seconds + (minutes * 60)); //秒为单位
document.userinfo.time_stay.value=time; //表单time_stay
}
//-->
</script>
上面脚本放到顶部(一般放head内)
<input type="hidden" name="time_stay" value="0"> //在表单中建立一个名称为time_stay的隐藏表单顶目
<INPUT onClick="return stay();" type="submit" value="提交" name="next"> //提交表单时调用上面脚本中的stay()函数
表单提交上去以后,在接收数据页面里,可以使用 request.form("time_stay") 来调用停留时间。