1. Token.php
    2.  
    3. <?php
    4.  
    5. /*
    6. * Created on 2013-3-25
    7. *
    8. * To change the template for this generated file go to
    9. * Window - Preferences - PHPeclipse - PHP - Code Templates
    10. */
    11. function getToken($len = 32, $md5 = true) {
    12. # Seed random number generator
    13. # Only needed for PHP versions prior to 4.2
    14. mt_srand((double) microtime() * 1000000);
    15. # Array of characters, adjust as desired
    16. $chars = array (
    17. 'Q',
    18. '@',
    19. '8',
    20. 'y',
    21. '%',
    22. '^',
    23. '5',
    24. 'Z',
    25. '(',
    26. 'G',
    27. '_',
    28. 'O',
    29. '`',
    30. 'S',
    31. '-',
    32. 'N',
    33. '<',
    34. 'D',
    35. '{',
    36. '}',
    37. '[',
    38. ']',
    39. 'h',
    40. ';',
    41. 'W',
    42. '.',
    43. '/',
    44. '|',
    45. ':',
    46. '1',
    47. 'E',
    48. 'L',
    49. '4',
    50. '&',
    51. '6',
    52. '7',
    53. '#',
    54. '9',
    55. 'a',
    56. 'A',
    57. 'b',
    58. 'B',
    59. '~',
    60. 'C',
    61. 'd',
    62. '>',
    63. 'e',
    64. '2',
    65. 'f',
    66. 'P',
    67. 'g',
    68. ')',
    69. '?',
    70. 'H',
    71. 'i',
    72. 'X',
    73. 'U',
    74. 'J',
    75. 'k',
    76. 'r',
    77. 'l',
    78. '3',
    79. 't',
    80. 'M',
    81. 'n',
    82. '=',
    83. 'o',
    84. '+',
    85. 'p',
    86. 'F',
    87. 'q',
    88. '!',
    89. 'K',
    90. 'R',
    91. 's',
    92. 'c',
    93. 'm',
    94. 'T',
    95. 'v',
    96. 'j',
    97. 'u',
    98. 'V',
    99. 'w',
    100. ',',
    101. 'x',
    102. 'I',
    103. '$',
    104. 'Y',
    105. 'z',
    106. '*'
    107. );
    108. # Array indice friendly number of chars;
    109. $numChars = count($chars) - 1;
    110. $token = '';
    111. # Create random token at the specified length
    112. for ($i = 0; $i < $len; $i++)
    113. $token .= $chars[mt_rand(0, $numChars)];
    114. # Should token be run through md5?
    115. if ($md5) {
    116. # Number of 32 char chunks
    117. $chunks = ceil(strlen($token) / 32);
    118. $md5token = '';
    119. # Run each chunk through md5
    120. for ($i = 1; $i <= $chunks; $i++)
    121. $md5token .= md5(substr($token, $i * 32 - 32, 32));
    122. # Trim the token
    123. $token = substr($md5token, 0, $len);
    124. }
    125. return $token;
    126. }
    127. ?>
    128. form.php
    129.  
    130. <?php
    131. include_once("token.php");
    132. $token = getToken();
    133. session_start();
    134. $_SESSION['token'] = $token;
    135. ?>
    136. <form action="action.php" method="post"
    137. <input type="hidden" name="token" value="<?=$token?>" />
    138. <!-- 其他input submit之类的 -->
    139. </form>
    140. action.php
    141.  
    142. <?php
    143. session_start();
    144. if($_POST['token'] == $_SESSION['token']){
    145. unset($_SESSION['token']);
    146. echo "这是一个正常的提交请求";
    147. }else{
    148. echo "这是一个非法的提交请求";
    149. }
    150. ?>

防止php重复提交表单更安全的方法的更多相关文章

  1. spring mvc 防止重复提交表单的两种方法,推荐第二种

    第一种方法:判断session中保存的token 比较麻烦,每次在提交表单时都必须传入上次的token.而且当一个页面使用ajax时,多个表单提交就会有问题. 注解Token代码: package c ...

  2. PHP防止用户重复提交表单

    我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦. 那么如何规避 ...

  3. 关于Asp.Net中避免用户连续多次点击按钮,重复提交表单的处理

    Web页面中经常碰到这类问题,就是客户端多次点击一个按钮或者链接,导致程序出现不可预知的麻烦. 客户就是上帝,他们也不是有意要给你的系统造成破坏,这么做的原因很大一部分是因为网络慢,点击一个操作之后, ...

  4. Struts2 token禁止重复提交表单

    如果服务器响应慢的情况下,用户会重复提交多个表单,这时候有两种设计思想: 1.在客户端使用JS技术,禁止客户重复提交表单.但是这样会使一些不使用浏览器方式登陆的人比如使用底层通信来攻击你的服务器 2. ...

  5. struts2中token防止重复提交表单

    struts2中token防止重复提交表单 >>>>>>>>>>>>>>>>>>>&g ...

  6. JavaWeb 之 重复提交表单和验证码相关的问题!

    下面我们首先来说一下表单的重复提交问题,我们知道在真实的网络环境中可能受网速带宽的原因会造成页面中表单在提交的过程中出现网络的延迟等问题,从而造成多次提交的问题!下面我们就具体来分析一下造成表单提交的 ...

  7. php防止重复提交表单

    解决方案一:引入cookie机制来解决 提交页面代码如下a.php代码如下: <form id="form1" name="form1" method=& ...

  8. JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体

    1. struts 工作流程图 超链接 2. 入门案例 struts入门案例: 1.写一个注册页面,把请求交给 struts处理 <form action="${pageContext ...

  9. 利用JS提交表单的几种方法和验证(必看篇)

    第一种方式:表单提交,在form标签中增加onsubmit事件来判断表单提交是否成功 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <scr ...

随机推荐

  1. 网络安装CentOS6.4

    第一步:所需工具安装包下载地址: http://115.com/file/antbtamu#网络安装CentOS.rar(或者下载NetbootM.exe和hfs.exe) 第二步:将CentOS6. ...

  2. 洛谷 P2721 小Q的赚钱计划

    洛谷 这大概是我见过最水的紫题吧- 洛谷标签赞一个! 题意:你有一年时间,把10w元存银行变成更多钱,在特定时间区间内,你会有一些利息,不过不可中途退出. 直接dp:st[i]表示区间左端点,ed[i ...

  3. [note]克鲁斯卡尔重构树

    克鲁斯卡尔重构树 又叫并查集重构树 大概在NOI2018之前还是黑科技 现在?烂大街了 主要是针对图上的对边有限制的一类问题 比如每次询问一个点u不能经过边权大于w的边能走到的第k大点权是多少 也就是 ...

  4. [NOIP2018PJ]对称二叉树

    [NOIP2018PJ]对称二叉树 这个题正常人看到题面难道不是哈希? 乱写了个树哈希... #include<bits/stdc++.h> using namespace std; co ...

  5. Java基础—数据类型

    Java的两大数据类型 基本数据类型 引用类型 Java程序中,new出来的对象存储在堆中(引用类型),但当使用new创建一个小的.简单的对象时,往往不是很有效,所以对于这些类型,Java不用new来 ...

  6. gradle build 找不到tools.jar 解决方法

    import javax.tools.ToolProvider compile(files(((URLClassLoader) ToolProvider.getSystemToolClassLoade ...

  7. GPS坐标(WGS84)转换百度坐标(BD09) python测试

    基础知识坐标系说明: WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系. GCJ02:是由中国国家测绘局制订的地理信息系统的坐标系统.由WGS84坐标系经加密后的坐标 ...

  8. python区分大小写吗

    如果能区分像myname和Myname这样的标识符,那么它就是区分大小写的.也就是说它很在乎大写和小写. myname='Ayushi' print(Myname) Traceback (most r ...

  9. HDU 1159 Common Subsequence(POJ 1458)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

  10. XSS Attacks - Exploiting XSS Filter

    XSS Attacks - Exploiting XSS Filter mramydnei · 2015/12/21 10:11 from:http://l0.cm/xxn/ 0x00 前言 这又是一 ...