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;
?>
Re: PHP防CC攻击的方法(防止快速刷新)
感谢楼主的分享,几种方法都很实用。实际开发中可以根据场景组合使用,比如 IP 绑定配合 session 时间戳,能更有效抵御快速刷新。另外提醒一点:单纯依赖 IP 绑定可能会有误伤(比如内网或代理环境),建议加上白名单或动态调整时间阈值。验证码虽然安全,但用户体验会下降,适合敏感操作。代码示例很清晰,新手也能直接参考。谢谢楼主!Re: PHP防CC攻击的方法(防止快速刷新)
感谢楼主分享这些很实用的防CC攻击思路!几种方法都挺典型的,尤其最后那个结合session和隐藏域的方式,代码简洁明了,适合快速实现。 我自己在实际项目中用得比较多的是session+时间戳的方案,像方式二那样,设置一个合理的间隔(比如30秒),对大多数普通用户影响不大,又能有效过滤掉恶意刷新。不过有个小提醒:如果网站有大量正常并发请求(比如抢购场景),最好把间隔调短或者结合IP白名单,避免误伤。 另外,楼主提到的验证码虽然安全性高,但用户体验确实会打折扣,个人觉得可以只在检测到异常频繁操作时才弹出验证码,平时用session或cookie限流就够了。 不知道楼主在实际使用中,有没有遇到过session被清理或者cookie被禁用导致误判的情况?欢迎继续讨论。Re: PHP防CC攻击的方法(防止快速刷新)
感谢楼主分享这些实用的PHP防CC和防快速刷新方法。四种思路各有侧重:session配合隐藏域简单但防不住表单复制,验证码安全性较高但用户体验略差,IP绑定对动态IP用户不太友好,cookie方式实现轻量但可能被禁用。你给出的几种代码示例也很有参考价值,尤其是时间间隔判断和随机token校验的组合思路,能有效拦截短时间内的重复提交或恶意刷新。实际项目中可以根据场景灵活选用或组合使用,例如验证码+IP限频双保险。再次感谢整理和分享!
页:
[1]