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

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


很多方法:(以下仅简单方法的简单思路,对于防止菜鸟“黑客”足矣):

1、检测referer来源地址是否为本站。($_SERVER['HTTP_REFERER'])

2、使用验证码来验证数据提交的合法性,能使用验证码就尽量使用。

3、记录IP,一定时间内禁止此ip进行二次提交/刷新。

4、前台用js生成随机加密码。

等等......



自己根据网上的实例瞎弄了一个(仅供参考):

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?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>




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





      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1265776,如需转载请自行联系原作者




上一篇:nfs 客户端挂在后出现uid和gid为 4294967294 4294967294的解决办法


下一篇:SharePoint 查找字段内部名称的小方法