总结了一下处理防灌水的几种机制,
1. 写入客户端Cookie,客户端每次发帖后,写入Cookie中一个postTime值=now()
,然后,每次提交发布信息时进行验证,如果Cookie中的postTime小于15秒,则拒绝发布信息。
优点:可以进行客户端的校验,省去验证码的服务器端校验造成的服务器端的负载压力,
缺点:如果客户端每次都清空Cookie值,则很难处理,
建议:可以结合验证码方法进行双重验证,避免客户端频繁发布信息
2.中心思想:使用数据库的Inserted触发器来屏蔽博客上的垃圾广告留言
自己架设博客,经常会有垃圾留言,俗称Spam,许多是广告留言,如何删除和屏蔽这些留言是令人头痛的问题。我的这个博客的源程序中没有屏蔽广告留言的功能,只有图形数字签名认证。
在 网上找了半天,有添加算式,让留言用户填写结果的等等,需要修改Blog源程序,比较麻烦。突然我想用SQL SERVER中的触发器来屏蔽是瞒不错的, 比较简单易行,只要几行代码就可以搞定。说干就干,在SQL Server2005中,打开SQL Server 2005的 management studio,连接到数据库,选择自己的Blog数据库,单击表,单击需要屏蔽留言的数据表,右键单击触发器,选择新建触发器。在 修改代码后,单击执行按钮即可生成该触发器。
下面是我新建的触发器的源代码
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= Alter TRIGGER [deleteguanggao] on [dbo].[blog_Comment] AFTER Insert AS IF Exists (select * from Inserted where comm_AutoKEY=1 or comm_Author like '世纪之声翻译 %' or comm_Author like '四海一心%' or comm_Author like '机票% ' or comm_postip like '220.175.64.%' or comm_postip like '218.242.67.%' or comm_postip like '218.242.67.%' or comm_postip like '60.1.119.%') BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with Select statements. SET NOCOUNT ON; rollback transaction -- Insert statements for trigger here END
如果你是第一次建立,不是Alter TRIGGER ,是Create TRIGGER.
该触发器在Insert事件发生后触发,也就是说,在有人向你的博客上留言是触发。
如 果已插入的记录符合上述条件,数据库将进行回滚。也就是无法插入符合该条件的记录。你可以根据垃圾留言的作者或IP进行设置。上面 Comm_autokey,Comm_author,Comm_postip是留言数据表的字段,该条件禁用了自动发贴,禁用了作者为世纪之声翻译,IP 是218.242.67等的留言。
当然,这种反SPAM的方式是亡羊补牢式的。
如果你的后台数据库式Ms sql 2000,也可采用这种方式。
3.