博客防spam/陌生人恶意留言另一方案

王志勇 发表于 2009年10月12日 18:37

防spam的规则,通常不会冲突,规则越多,越减少spam。如果你有时间,一个博客可以设置几条,几十条规则。如之前的规则,http://www.auiou.com/relevant/00000564.jsp,已经可以很有效地防止spam。因为博客是个人博客,再加上判断的程序仅在用户发送表单时才会生效,只要规则不是很多,可能不会影响博客的速度。如果你的博客或者论坛访问量很大,留言数很多,可以将多条规则用include()函数将程序分开,当符合条件时才会调用相应的程序,这是PHP的一大优点,不符合条件不会调用,可有效地大大提高程序的速度。

网友的绝大多数留言都是友好的。如果博客中偶尔出现一条陌生人的恶意留言,可能会影响博主的心情,如果在意,会与这些发布恶意留言的网友的命运发生牵连,与他们的业力发生牵连。留言者,没有权利审判别人。如上面的链接中的方法,可以直接封闭IP。

可以给博客建立留言的安全级别分类,建立信任级别列表,在程序上实现起来较容易。信任级别列表如下:

  1. 好友的用户名列表。当用户留言时,如果用户名存在于好友列表中,直接显示留言,或者直接进入审核后台。
  2. 好友的URL列表,就是网友留言的网址,判断方法同1。
  3. 陌生人不需要建立列表。只要不存在于所有建立的列表中,则判断为陌生人。对陌生人的留言,可以自由设置留言条件,比如弹出验证码;或者稍紧急时弹出复杂的验证码,提高留言的门槛。可以建立一个变量如$aa,由$aa来控制安全级别。当$aa==5,表示稍紧急时刻,这样维护博客时不用修改程序,只要在建立的后台网页中改变$aa的值。
  4. spam的用户名列表、URL列表。
  5. 封IP的用户名列表、IP列表。

上述一共有6个列表,分别是好友的用户名列表、好友的URL列表、spam的用户名列表、URL列表、封IP的用户名列表、IP列表。建立的方法是整个列表作为一个字符串,用“|”符号可巧妙地判断用户的关键字是否在其中,这样不用循环程序,用strpos()函数就可以一次判断完成。例如好友的URL列表是:

|www.abc.com|wwww.auiou.com|www.cctv.com|www.ad.com|
假设上面这一行的值是$ac,用户留言时的URL是http://www.abc.com。

其它的列表都是如法炮制,注意最前面和最后的“|”不要省略。然后,使用strpos()函数判断www.abc.com是否在$ac的方法是:

<$url="www.abc.com";
$ur5="|".$url."|";
if (strpos($ac,$ur5)){} //此语句表示$url是否在$ac其中。
?>

这里在$url左右两边各加了一个“|”的符号,就可以准确判断。其它列表的建立和判断方法,都是一样的。http://www.abc.com去掉http://的方法如这里的2、3楼的回复,http://www.auiou.com/relevant/00000466.jsp

附:这里有一种很特殊的情况,使用strpos()直接使用if (strpos($ac,$ur5)){}的形式,而无需使用if (strpos($ac,$ur5)!==false){},程序不会出错,是因为从第2个字符开始是URL列表。假如用户的URL如www.abc.com位于URL列表的第1个网址,那么strpos($ac,$ur5)的值是1。

6条评论:
1   唏嘘一世 2009-10-12 20:41
我用的第1种方式对评论进行自动审核,不过可能过些时间后改为验证邮箱地址的方式。
网友昵称和邮箱地址,在博客的评论中,一般是固定不变的。当出现新的(陌生的)昵称或邮箱时,加入审核的列表,非常管用。
2   华晨 2009-10-13 22:20
有问题呀!如果网址中有|怎么办呢?不是乱了么?
还有,如果好友列表很长很长,最长的字段类型都储存不了了怎么办?
而且当好友列表长了以后,每次把这个列表提取到内存中需要的内存就会越来越大的,所以我觉得这个方案有待改善。
3   自由勇 2009-10-14 08:40
上述都是可以解决的,速度是优先考虑的因素。
4   第一先生 2009-10-15 11:45
我就不发表了 赞一下吧
5   吴熠 2009-10-15 14:41
个人觉得:越是严格的审核,越不利于用户快捷的使用和体验。
6   华晨 2009-10-17 18:28
@吴熠
不敢苟同,都是垃圾评论的网页用户体验就好么?

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

王志勇:1980-09-26 (44周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +

2020年 +
2019年 +
2018年 +
2016年-2017年(9)
2014年06月-09月(10)
2013年 +
2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2024 auiou.com All rights reserved.
此Blog程序由王志勇编写