php防止恶意频繁刷新页面或form提交

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>





你可能感兴趣的:(重复刷新,恶意提交)