查看: 9880|回复: 0

PHP防CC攻击的方法(防止快速刷新)

[复制链接]
发表于 2012-12-22 16:09:19 | 显示全部楼层 |阅读模式
1.session记录
  submit.php为发送页面,在这个页面上设置一个session变量,,并作为隐藏域和表单一起发送到,submitdeal.php页面.在服 务器端把post上来的隐藏变量和服务器端记录的session变量进行对比,比如一样,则写入数据库并清除session,这样用户刷新页面,两个值 不相等提示错误或跳转

  优点:不用用户输入验证码

  缺点:表单容易被复制


  2.验证码
  原理和第一种一样,只是session数据不作为隐藏域提交,,而是让用户填写,大多数网站都彩用,,有文字验证码和图片验证码,图片验证码安全性高..别


  3.IP绑定
  提交数据后,先从IP表里检索客户端IP,如果有,并且没有过期,那么报错,否则写入数据库,然后再取客房端IP,把IP写入数据库。


  4.cookie
  客户提交后处理程序先检索客户端有没有设置cookie,如果有,则不重复提交,如果没有,则写数据,,再写个cookie;

  例:

  方式一:

  <?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;
  }
  ?>



  方式二:

  <?php
  session_start();
  $allow_sep = "30000";
  if (isset($_SESSION["post_sep"]))
  {
  if (time() - $_SESSION["post_sep"] < $allow_sep)
  {
  exit("请不要反复刷新");
  }
  else
  {
  $_SESSION["post_sep"] = time();
  }
  }
  else
  {
  $_SESSION["post_sep"] = time();
  }
  ?>

  方式三:

  <?
  session_start();
  if(!emptyempty($_POST[name])){
  $data = $_POST[name];
  $tag = $_POST[tag];
  if($_SESSION[status]==$tag){
  echo $data;
  }else{
  echo "不允许刷新!";
  }
  }
  $v = mt_rand(1,10000);
  ?>
  <form method="post" name="magic" action="f5.php"><input type="hidden"
name="tag" value="<?=$v?>"><input type=text name="name"><input type="submit" value="submit">
  </form>
  <?
  echo $v;
  $_SESSION[status] = $v;
  ?>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

旗下站点

邮箱系统

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2025-3-7 15:07 , Processed in 0.029230 second(s), 13 queries , Gzip On, MemCache On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部