php防止恶意频繁刷新页面或form提交
很多方法:(以下仅简单方法的简单思路,对于防止菜鸟“黑客”足矣):
1、检测referer来源地址是否为本站。($_SERVER['HTTP_REFERER'])
2、使用验证码来验证数据提交的合法性,能使用验证码就尽量使用。
3、记录IP,一定时间内禁止此ip进行二次提交/刷新。
4、前台用js生成随机加密码。
等等......
自己根据网上的实例瞎弄了一个(仅供参考):
<?php session_start(); function getIps(){ if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')){ $IP = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $IP = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $IP = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $IP = $_SERVER['REMOTE_ADDR']; } return $IP ? $IP : "unknow"; } function allowRefresh($parameter){ date_default_timezone_set('Asia/Shanghai'); $nowUserIp = getIps(); $allowOldTime = md5($parameter.$nowUserIp); $allowTime = 3;//防刷新时间。单位:秒 10秒之后才能再次提交(刷新) if(!isset($_SESSION[$allowOldTime])){ $_SESSION[$allowOldTime] = time(); return true; } elseif(time() - $_SESSION[$allowOldTime] > $allowTime){ $_SESSION[$allowOldTime] = time(); return true; } else{ return false; } } if($_GET){ $k=$_GET['k']; $submitKey=$_GET['submitKey']; $toCheckStr=$k.$submitKey; if(empty($k)||empty($submitKey)||($submitKey !== 'true')){ die('errormsg'); } if(allowRefresh($toCheckStr)==true){ echo 'Congratulations!<br />mysql听令:去搜索俺想要的结果!继续往下执行...'; } else{ echo '请不要频繁提交'; } } ?> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <form action="" method="get"> <input type="text" name="k" /><br /> <input type="text" name="submitKey" value="true" /> <input type="submit" value="提交" /> </form>