小男孩 发表于 2012-12-22 16:09:19

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

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)){
  $data = $_POST;
  $tag = $_POST;
  if($_SESSION==$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 = $v;
  ?>
页: [1]
查看完整版本: PHP防CC攻击的方法(防止快速刷新)