Table des matières
php防止恶意刷新页面的方法
延伸阅读
Maison développement back-end tutoriel php php防止恶意刷新页面的步骤

php防止恶意刷新页面的步骤

Jun 13, 2016 pm 12:23 PM
counter gt lt quot session

php防止恶意刷新页面的方法

php防止恶意刷新页面的方法

一般来说,恶意刷新就是不停的去刷新提交页面,导致出现大量无效数据,下面我们来总结一下php 防止恶意刷新页面方法总结。

防止恶意刷页面的原理是:

要求在页面间传递一个验证字符串, 

在生成页面的时候 随机产生一个字符串, 

做为一个必须参数在所有连接中传递。同时将这个字符串保存在session中。

点连接或者表单进入页面后,判断session中的验证码是不是与用户提交的相同,如果相同,则处理,不相同则认为是重复刷新。 

在处理完成后将重新生成一个验证码,用于新页面的生成
PHP实现代码如下:

<?php session_start(); $k=$_GET['k']; $t=$_GET['t']; $allowTime = 1800;//防刷新时间 $ip = get_client_ip(); $allowT = md5($ip.$k.$t); if(!isset($_SESSION[$allowT])) { $refresh = true; $_SESSION[$allowT] = time(); }elseif(time() - $_SESSION[$allowT]>$allowTime){ $refresh = true; $_SESSION[$allowT] = time(); }else{ $refresh = false; } ?>
Copier après la connexion

ie6提交两次我也碰到过,大致是用图片代替submit时,图片上有个submit(),这样会提交两次,如果只是submit钮我没碰到过提交两次的情况。 现在整理一下:

方法基本上前面几位说得差不多
接收的页即2.php分为两部分,一部分处理提交过来的变量,一部分显示页面

处理变量完毕用header( "location: ".$_SERVER[ 'PHP_SELF '])跳转到自身页

本部分要做判断,如果没有post的变量就跳过。当然也可以跳到别的页面。

跳到别的页面返回时会有问题,建议做在一个php文件里。
如果上页穿过来得变量不符合要求可以强制返回 <script> history.go(-1); </script>

只说了一下大体思路,也许高手们不会遇到此类问题,可是并不是每个人都是高手。

if(isset($_POST)) {  if(变量不符合要求) <script> history.go(-1); </script> else //操作数据 ... if(操作完成) header( "location: ".$_SERVER[ 'PHP_SELF ']); } <script language= "JavaScript "> <!--  javascript:window.history.forward(1); //--> </script>
Copier après la connexion


也可以利用COOKIE

<?php$c_file="counter.txt"; //文件名赋&#20540;给变量if(!file_exists($c_file)) //如果文件不存在的操作{$myfile=fopen($c_file,"w"); //创建文件fwrite($myfile,"0"); //置入“0”fclose($myfile); //关闭文件}$t_num=file($c_file); //把文件内容读入变量if($_COOKIE["date"]!="date(Y年m月d日)") //判断COOKIE内容与当前日期是否一致{$t_num[0]&#43;&#43;; //原始数据自增1$myfile=fopen($c_file,"w"); //写入方式打开文件fwrite($myfile,$t_num[0]); //写入新数&#20540;fclose($myfile); //关闭文件//重新将当前日期写入COOKIE并设定COOKIE的有效期为24小时setcookie("date","date(Y年m月d日)",time()&#43;60*60*24);}?>
Copier après la connexion


利用session:

主页面文件 index.php 代码:

<?phpsession_start();?><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>通过session禁止页面刷新</title><style type="text/css"><!--.style1 {font-size: 14px;font-family: "华文仿宋";font-weight: bold;}.style2 {font-family: "华文琥珀"}--></style></head><body><?php//使用文本存储数据   if($_SESSION[temp]==""){   if(($fp=fopen("counter.txt","r"))==false){    echo "打开文件失败!";     }else{ $counter=fgets($fp,1024);   //读取文件中数据     fclose($fp);                        //关闭文本文件     $counter&#43;&#43;;                         //计数器增加1     $fp=fopen("counter.txt","w");       //以写的方式打开文本文件       fputs($fp,$counter);                //将新的统计数据增加1     fclose($fp);    }                   //关闭文//从文本文件中读取统计数据       if(($fp=fopen("counter.txt","r"))==false){       echo "打开文件失败!";       }else{        $counter=fgets($fp,1024);        fclose($fp);           echo "数字计数器: " .$counter ;    }   //输出访问次数     $_SESSION[temp]=1; //登录以后,$_SESSION[temp]的&#20540;不为空,给$_SESSION[temp]赋一个&#20540;1     }else{     echo "<script>alert('您不可以刷新本页!!'); history.back();</script>";     }?><table width="300" border="0" cellpadding="0" cellspacing="0" background="images/141.jpg"><tr>    <td height="35" align="center"><span class="style1">通过session禁止页面刷新</span></td></tr><tr>    <td height="40" align="center"><span class="style2">      <?php if(($fp=fopen("counter.txt","r"))==false){      echo "打开文件失败!";      }else{        $counter=fgets($fp,1024);        fclose($fp);           echo "网页访问量: " .$counter ;     }   //输出访问次数 ?>    </span></td></tr><tr>    <td height="25" align="center"> </td></tr></table></body></html>
Copier après la connexion


其中:

counter.txt 文件为同目录下的记录登录数文件。

$counter=fgets($fp,1024); 为读取文件中 数值型值的方法(可包含小数点数值)
希望本文所述对大家的PHP程序设计有所帮助。 

参考来源: 
php防止恶意刷新与刷票的方法
http://www.lai18.com/content/369326.html

延伸阅读

《PHP安全编程系列》系列技术文章整理收藏 
PHP安全编程系列收藏夹收藏了有关PHP安全编程方面的知识,对PHP安全编程提供学习参考

1PHP网站常见安全漏洞,及相应防范措施总结

2PHP开发安全问题总结

3php防止网站被刷新的方法汇总

4php防止恶意刷新与刷票的方法

5PHP安全之使用 Register Globals

6PHP安全之用户提交的数据

7PHP安全之魔术引号——什么是魔术引号以及如何使用

8PHP安全之隐藏PHP脚本扩展名

9PHP安全之文件系统安全——Null字符问题

10PHP安全之错误报告

11PHP安全之数据库安全——设计、连接和加密

12PHP安全之数据库安全——SQL注入及预防措施

13PHP安全之文件系统安全及防范措施

14PHP安全之以Apache模式安装时可能遇到的攻击及解决办法

15PHP安全之以CGI 模式安装时可能遇到的攻击及解决办法

16PHP安全之简介和总则

17php防止sql注入之过滤分页参数实例

18php防止站外远程提交表单的方法

19php防止伪造数据从地址栏URL提交的方法

20PHP防止表单重复提交的几种常用方法汇总

21php防止伪造的数据从URL提交方法

22PHP防止post重复提交数据的简单例子

23PHP安全之防止你的源代码或重要配置信息暴露在外

24php防止sql注入示例分析和几种常见攻击正则表达式

25php防止sql注入代码实例

26php防止SQL注入详解及防范

27PHP防止跨域提交表单

28php安全之狗尾续貂

29解析php防止form重复提交的方法

30什么XSS攻击?PHP防止XSS攻击函数

31php防止漏洞策略,创建高性能web

32php安全之直接用$获取值而不$_GET 字符转义

33PHP安全编程:共享主机的源码安全

34PHP安全编程:更优的会话数据安全

35PHP安全编程:会话数据注入

36PHP安全编程:主机文件目录浏览

37PHP安全编程:PHP的安全模式

38PHP安全编程:阻止文件名被操纵

39PHP安全编程:文件包含的代码注入攻击

40PHP安全编程:文件目录猜测漏洞

41PHP安全编程:打开远程文件的风险

42PHP安全编程:shell命令注入

43PHP安全编程:暴力破解攻击

44PHP安全编程:密码嗅探与重播攻击

45PHP安全编程:记住登录状态的安全做法

46PHP安全编程:session劫持的防御

47PHP安全编程:防止源代码的暴露

48PHP安全编程:留心后门URL

49PHP安全编程:session固定获取合法会话

50PHP安全编程:cookie暴露导致session被劫持

51PHP安全编程:防止SQL注入

52PHP安全编程:从URL的语义进行攻击

53PHP安全编程:文件上传攻击的防御

54PHP安全编程:跨站脚本攻击的防御

55PHP安全编程:跨站请求伪造CSRF的防御

56PHP安全编程:关于表单欺骗提交

57PHP安全编程:表单与数据安全

58PHP安全编程:不要暴露数据库访问权限

59PHP安全编程:HTTP请求欺骗

60PHP安全编程:对输出要进行转义

61PHP安全编程:过滤用户输入

62PHP安全编程:网站安全设计的一些原则

63PHP安全编程:不要让不相关的人看到报错信息

64PHP安全编程:register_globals的安全性

65PHP安全编程:可用性与数据跟踪

66php防止xss攻击的方法

67discuz的php防止sql注入函数

版权声明:本文为博主原创文章,未经博主允许不得转载。

3楼sinat_26360227昨天 16:08
sssssssssgy
2楼wowkk昨天 14:05
hello,请问有兴趣来广州工作吗?
1楼ndsckm昨天 09:33
我想知道一般大型网站是怎么处理的
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les différences entre Huawei GT3 Pro et GT4 ? Quelles sont les différences entre Huawei GT3 Pro et GT4 ? Dec 29, 2023 pm 02:27 PM

De nombreux utilisateurs choisiront la marque Huawei lors du choix des montres intelligentes. Parmi eux, les Huawei GT3pro et GT4 sont des choix très populaires. De nombreux utilisateurs sont curieux de connaître la différence entre Huawei GT3pro et GT4. Quelles sont les différences entre Huawei GT3pro et GT4 ? 1. Apparence GT4 : 46 mm et 41 mm, le matériau est un miroir en verre + un corps en acier inoxydable + une coque arrière en fibre haute résolution. GT3pro : 46,6 mm et 42,9 mm, le matériau est du verre saphir + corps en titane/corps en céramique + coque arrière en céramique 2. GT4 sain : en utilisant le dernier algorithme Huawei Truseen5.5+, les résultats seront plus précis. GT3pro : ajout d'un électrocardiogramme ECG, d'un vaisseau sanguin et de la sécurité

Comment définir le délai d'expiration de la session dans SpringBoot Session Comment définir le délai d'expiration de la session dans SpringBoot Session May 15, 2023 pm 02:37 PM

Le problème a été détecté dans le délai d'expiration de la session de production du projet Springboot. Le problème est décrit ci-dessous : Dans l'environnement de test, la sortie de session a été configurée en modifiant le fichier application.yaml après avoir défini différentes heures pour vérifier la configuration de la sortie de session. est entré en vigueur, le délai d'expiration a été directement fixé à 8 heures pour la sortie. Arrivé en environnement de production. Cependant, j'ai reçu à midi des commentaires de clients indiquant que le délai d'expiration du projet était court. Si aucune opération n'est effectuée pendant une demi-heure, la session expirera et nécessitera des connexions répétées. Résolvez le problème de la gestion de l'environnement de développement : le projet Springboot intègre Tomcat, donc la sortie de session configurée dans application.yaml dans le projet est efficace. Environnement de production : la version de l'environnement de production est

Comment résoudre l'échec de la session Comment résoudre l'échec de la session Oct 18, 2023 pm 05:19 PM

L'échec de la session est généralement dû à l'expiration de la durée de vie de la session ou à l'arrêt du serveur. Les solutions : 1. Prolonger la durée de vie de la session ; 2. Utiliser le stockage persistant ; 3. Utiliser les cookies ; 4. Mettre à jour la session de manière asynchrone ; 5. Utiliser un middleware de gestion de session ;

Solution au problème inter-domaines de session PHP Solution au problème inter-domaines de session PHP Oct 12, 2023 pm 03:00 PM

Solution au problème inter-domaines de PHPSession Dans le développement de la séparation front-end et back-end, les requêtes inter-domaines sont devenues la norme. Lorsque nous traitons de problèmes interdomaines, nous impliquons généralement l'utilisation et la gestion de sessions. Cependant, en raison des restrictions de la politique d'origine du navigateur, les sessions ne peuvent pas être partagées par défaut entre les domaines. Afin de résoudre ce problème, nous devons utiliser certaines techniques et méthodes pour réaliser le partage de sessions entre domaines. 1. L'utilisation la plus courante des cookies pour partager des sessions entre domaines

Que dois-je faire si la session php disparaît après l'actualisation ? Que dois-je faire si la session php disparaît après l'actualisation ? Jan 18, 2023 pm 01:39 PM

Solution au problème de disparition de la session php après l'actualisation : 1. Ouvrez la session via "session_start();" ; 2. Écrivez toutes les configurations publiques dans un fichier php ; 3. Le nom de la variable ne peut pas être le même que l'indice du tableau ; 4. Dans Vérifiez simplement le chemin de stockage des données de session dans phpinfo et vérifiez si la session dans le répertoire de fichiers est enregistrée avec succès.

Correctif : l'outil de capture ne fonctionne pas sous Windows 11 Correctif : l'outil de capture ne fonctionne pas sous Windows 11 Aug 24, 2023 am 09:48 AM

Pourquoi l'outil Snipping ne fonctionne pas sous Windows 11 Comprendre la cause première du problème peut aider à trouver la bonne solution. Voici les principales raisons pour lesquelles l'outil de capture peut ne pas fonctionner correctement : L'assistant de mise au point est activé : cela empêche l'ouverture de l'outil de capture. Application corrompue : si l'outil de capture plante au lancement, il est peut-être corrompu. Pilotes graphiques obsolètes : des pilotes incompatibles peuvent interférer avec l'outil de capture. Interférence provenant d'autres applications : d'autres applications en cours d'exécution peuvent entrer en conflit avec l'outil de capture. Le certificat a expiré : une erreur lors du processus de mise à niveau peut provoquer ce problème. Solution simple. Celles-ci conviennent à la plupart des utilisateurs et ne nécessitent aucune connaissance technique particulière. 1. Mettez à jour les applications Windows et Microsoft Store

Quel est le délai d'expiration par défaut de la session PHP ? Quel est le délai d'expiration par défaut de la session PHP ? Nov 01, 2022 am 09:14 AM

Le délai d'expiration par défaut de la session PHP est de 1440 secondes, soit 24 minutes, ce qui signifie que si le client ne s'actualise pas pendant plus de 24 minutes, la session en cours expirera si l'utilisateur ferme le navigateur, la session se terminera et la session PHP expirera. La session n'existera plus.

Comment résoudre le problème selon lequel le paramètre de délai d'expiration de la session Springboot2 n'est pas valide Comment résoudre le problème selon lequel le paramètre de délai d'expiration de la session Springboot2 n'est pas valide May 22, 2023 pm 01:49 PM

Problème : Aujourd'hui, nous avons rencontré un problème de délai d'expiration dans notre projet et les modifications apportées au fichier application.properties de SpringBoot2 n'ont jamais pris effet. Solution : Les propriétés server.* sont utilisées pour contrôler le conteneur intégré utilisé par SpringBoot. SpringBoot créera une instance du conteneur de servlet en utilisant l'une des instances ServletWebServerFactory. Ces classes utilisent les propriétés server.* pour configurer le conteneur de servlets contrôlé (tomcat, jetty, etc.). Lorsque l'application est déployée en tant que fichier war sur une instance Tomcat, les propriétés server.* ne s'appliquent pas. Ils ne s'appliquent pas,

See all articles