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

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

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

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

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

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

等等......

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

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>

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

php防止恶意频繁刷新页面或form提交相关推荐

  1. vue 添加完数据后刷新页面_vue form 表单提交后刷新页面的方法

    最近做的项目中,有增删改表格功能,在操作后需要实时更新页面数据.下面可以这样解决. 1.在methods中 定义好一个初始化渲染实例. 例如 lnitializationData(){//初始化页面数 ...

  2. php阻止form提交表单提交,防止表单提交时刷新页面-阻止form表单的默认提交行为...

    最近在写 ajax 提交的时候遇到一个问题,在执行 ajax 提交之后,浏览器页面自动刷新了,主要是没有 由于form 表单的默认提交行为.一下是几种阻止 form 表单默认提交行为的方式. 1.使用 ...

  3. ASP.NET 防止F5刷新页面按钮重复提交

    在按钮事件结束时添加一下: Response.Redirect(Request.RawUrl); 如果需要保存之前编辑好控件的状态请在Page_Load的时候添加  if (!IsPostBack) ...

  4. 避免刷新页面时重复提交表单数据

    https://www.cnblogs.com/xdp-gacl/p/3859416.html

  5. 快速刷新页面ajax出现404,react使用BrowserRouter打包后,刷新页面出现404

    nginx nginx.conf server { listen 80 default_server; server_name /var/www/example.com; root /var/www/ ...

  6. 登录页面和FORM的职责不对称,处理方法,刷新工作流程

    登录页面和FORM的职责不对称,处理方法,刷新工作流程: 转载于:https://www.cnblogs.com/quanweiru/p/9219829.html

  7. 【实习小tip】多层dialog弹窗遮罩问题、elementUI的form表单组件的select框在只读的情况下没办法拿到传来的数据、从弹窗子组件获取数据后需要刷新页面

    解决elementui多层dialog弹窗遮罩问题 弹窗套娃出现了整个屏幕都是遮罩层的问题,需要鼠标点击一下才能正常. 在弹窗组件代码上加上 append-to-body 就可以了,表示这个弹窗是嵌在 ...

  8. DIV弹窗 JS刷新页面

    关闭弹出页面,刷新父页面 window,self指代的是当前页面 parent,opener指的是当前页面的父页面 js刷新页面 location.href=location.href Code    ...

  9. php 不刷新提交,提交表单而不刷新页面ajax,php,javascript?

    我想提交表单而不刷新页面,从我阅读的内容来看,它应该可以与Ajax一起使用,我在做什么错? 当我这样做时,一切都与php和其他东西一起工作: document.getElementById(" ...

最新文章

  1. JVM指令详解(上)
  2. 《预训练周刊》第12期:无注意力变换器、借蛋白质语言模型论进化速度
  3. Swift学习之map、flatMap、filter、reduce的使用
  4. ArcGIS 复制要素
  5. MVCWebForm对照学习:传值方式
  6. window.setTimeout() 和 window.setInterval() 使用说明
  7. 22.循环控制.rs
  8. [数据库]数据库三级加锁协议深入理解
  9. datatable中某一列最小值_Asp.net中获取DataTable选择第一行某一列值
  10. python后台架构Django教程——项目配置setting
  11. TensorFlow工具及笔记
  12. Java删除服务器上的文件
  13. 有一行电文,已按以下规律译成密码: A-Z a-z B-Y b-y C-X c-x,即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程将密码译回原文,并
  14. 前缀树(Trie树)
  15. Redis—击穿、穿透、雪崩
  16. 计算机大类和三不限哪个好考,上岸经验 !公考千万别报“三不限”职位!
  17. list_ndarray_csr_lil占用空间比较
  18. 2021 年度计算机技术与软件专业技术资格(水平)考试安排
  19. 【TypeScript】深入学习TypeScript模块
  20. 银行数据资产的理解及盘点

热门文章

  1. sqlaction 更新至 v0.2.1.0,自动生成 JDBC 代码的数据库持久层工具
  2. Thrift在Windows及Linux平台下的安装和使用示例
  3. PHP中的符号 -、= 和 :: 分别表示什么意思?以及this,self,parent三个关键字的理解!...
  4. UICountingLabel实现数字变化的动画效果-b
  5. 模拟器中文输入法设置
  6. 索引维护存储过程(作业调用)
  7. DB2数据导入导出的小结
  8. MAC Opencv include选择
  9. 玩转OpenVswitch:简介
  10. Spring MVC国际化