php防止恶意频繁刷新页面或form提交
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提交相关推荐
- vue 添加完数据后刷新页面_vue form 表单提交后刷新页面的方法
最近做的项目中,有增删改表格功能,在操作后需要实时更新页面数据.下面可以这样解决. 1.在methods中 定义好一个初始化渲染实例. 例如 lnitializationData(){//初始化页面数 ...
- php阻止form提交表单提交,防止表单提交时刷新页面-阻止form表单的默认提交行为...
最近在写 ajax 提交的时候遇到一个问题,在执行 ajax 提交之后,浏览器页面自动刷新了,主要是没有 由于form 表单的默认提交行为.一下是几种阻止 form 表单默认提交行为的方式. 1.使用 ...
- ASP.NET 防止F5刷新页面按钮重复提交
在按钮事件结束时添加一下: Response.Redirect(Request.RawUrl); 如果需要保存之前编辑好控件的状态请在Page_Load的时候添加 if (!IsPostBack) ...
- 避免刷新页面时重复提交表单数据
https://www.cnblogs.com/xdp-gacl/p/3859416.html
- 快速刷新页面ajax出现404,react使用BrowserRouter打包后,刷新页面出现404
nginx nginx.conf server { listen 80 default_server; server_name /var/www/example.com; root /var/www/ ...
- 登录页面和FORM的职责不对称,处理方法,刷新工作流程
登录页面和FORM的职责不对称,处理方法,刷新工作流程: 转载于:https://www.cnblogs.com/quanweiru/p/9219829.html
- 【实习小tip】多层dialog弹窗遮罩问题、elementUI的form表单组件的select框在只读的情况下没办法拿到传来的数据、从弹窗子组件获取数据后需要刷新页面
解决elementui多层dialog弹窗遮罩问题 弹窗套娃出现了整个屏幕都是遮罩层的问题,需要鼠标点击一下才能正常. 在弹窗组件代码上加上 append-to-body 就可以了,表示这个弹窗是嵌在 ...
- DIV弹窗 JS刷新页面
关闭弹出页面,刷新父页面 window,self指代的是当前页面 parent,opener指的是当前页面的父页面 js刷新页面 location.href=location.href Code ...
- php 不刷新提交,提交表单而不刷新页面ajax,php,javascript?
我想提交表单而不刷新页面,从我阅读的内容来看,它应该可以与Ajax一起使用,我在做什么错? 当我这样做时,一切都与php和其他东西一起工作: document.getElementById(" ...
最新文章
- JVM指令详解(上)
- 《预训练周刊》第12期:无注意力变换器、借蛋白质语言模型论进化速度
- Swift学习之map、flatMap、filter、reduce的使用
- ArcGIS 复制要素
- MVCWebForm对照学习:传值方式
- window.setTimeout() 和 window.setInterval() 使用说明
- 22.循环控制.rs
- [数据库]数据库三级加锁协议深入理解
- datatable中某一列最小值_Asp.net中获取DataTable选择第一行某一列值
- python后台架构Django教程——项目配置setting
- TensorFlow工具及笔记
- Java删除服务器上的文件
- 有一行电文,已按以下规律译成密码: A-Z a-z B-Y b-y C-X c-x,即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程将密码译回原文,并
- 前缀树(Trie树)
- Redis—击穿、穿透、雪崩
- 计算机大类和三不限哪个好考,上岸经验 !公考千万别报“三不限”职位!
- list_ndarray_csr_lil占用空间比较
- 2021 年度计算机技术与软件专业技术资格(水平)考试安排
- 【TypeScript】深入学习TypeScript模块
- 银行数据资产的理解及盘点
热门文章
- sqlaction 更新至 v0.2.1.0,自动生成 JDBC 代码的数据库持久层工具
- Thrift在Windows及Linux平台下的安装和使用示例
- PHP中的符号 -、= 和 :: 分别表示什么意思?以及this,self,parent三个关键字的理解!...
- UICountingLabel实现数字变化的动画效果-b
- 模拟器中文输入法设置
- 索引维护存储过程(作业调用)
- DB2数据导入导出的小结
- MAC Opencv include选择
- 玩转OpenVswitch:简介
- Spring MVC国际化