php 防灌水机制,我设计的防灌水和封IP程序原理

我设计的防灌水程序和封IP程序,已经在ufoaq实施了一个多月,效果很好,既简单又高效,比我在2006年设计的封IP程序又简单了一些。防灌水程序主要是通过写入Cookies,封IP程序是通过写入Cookies兼直接从数据库读封IP的列表,本文以PHP为例。因为本程序需要写入Cookies,请在最外层的程序如post.php、reply.php、submit.php等等的最开头写入<?ob_start ();?>这句,否则会报错。

防灌水程序的原理如下,本程序写在一个留言判别的公用组件如judge.php,此文件被其它文件使用include()函数包含引用:

$te=30; //可在每个需要引用此公用组件的程序如post.php中声明30秒内只能发一次帖,如果省略$te=30;,那么在如下的一行会将其默认为60。

if (!$te) $te=60;

$t9=time();

if ($t9-$_COOKIE[te]if ($kx) {……} //给网友端(用户端)提示错误,并且程序不运行

?>

然后在post.php中写入Cookies,如下:

封IP程序的原理如下:

$ip=$_SERVER["REMOTE_ADDR"];

$i=…… //$i是从数据库中提取的封IP列表,例如$i的值为"125.33.125.255,133.134.99.1",多个IP用逗号隔开,此值可以在网站后台修改。因为网站后台的结构不同,本文中没有说明修改此值的程序,请程序员自行编写程序。因为下面的程序使用strpos()函数,而不是用循环程序来判断用户的IP是否存在于此$i的值当中,所以可以设置很多个需要封闭的IP,几百个也不会很影响程序的效率。当用户端写入Cookies后,用户已经被完全封闭IP,$i的值也可以全部删除。

$j=$_COOKIE[pe];

$h="您的IP地址已经被锁定。";

if ($j) $kx.=$h;

elseif (strpos($i,$ip)!==false){$kx.=$h;

if (!$j) setcookie("pe","50",time()+86400*9,"/");}

if ($kx) {……} //给网友端(用户端)提示错误,并且程序不运行

?>

倒数第2行是封闭IP 9天,如果需要让封闭IP为其它的天数,可以修改86400*9为其它值,例如86400*30是封闭IP 30天。本程序的思路是由if ($j) $kx.=$h;这一行判断,如果$_COOKIE[pe]的值不为空,则直接提示IP已被封闭;如果$_COOKIE[pe]为空,则用if (strpos($i,$ip)!==false)判断用户的IP是否在列表当中,如果在列表当中,则提示IP已被封闭,并且写入Cookies。使用Cookies和IP列表双重判断,增加了判断的条件和准确性。

4条评论:

3   自由勇 2009-09-24 12:28

Trackback来自 《防止批量spam的方法》

防灌水程序,可自由设置N秒内不能再发帖,在线及时封闭IP。

4   自由勇 2009-09-28 16:07

Trackback来自 《博客+论坛的方式》

我觉得比较好的模式是用博客+论坛的方式,当超过500回复,通知网友在论坛继续讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值