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!
mysql听令:去搜索俺想要的结果!继续往下执行...';
}
else{
echo '请不要频繁提交';
}
}
?>