黑帽联盟

 找回密码
 会员注册
查看: 1747|回复: 1
打印 上一主题 下一主题

[php] php防止网站被攻击的应急代码

[复制链接]
yun 黑帽联盟官方人员 

920

主题

37

听众

1364

积分

超级版主

Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2019-10-18 11:20
  • 签到天数: 678 天

    [LV.9]以坛为家II

    前不久一个网站竟然被攻击,数据库被刷掉了,幸好客户机器上有数据库备份。遇到这么严重的问题,必须抓紧找出漏洞,防止再次被攻击。各方面检查之后发现除了服务器需要设置正确之外,其他无从下手,只好从ip地址上来解决这种攻击的问题。

    如果发现某个ip访问网站太频繁了就加入到黑名单禁止访问,这不是一个很好的办法,但情急之下向不更好的解决方式,只是权宜之计,以后再进行深入的研究一下。
    这个方法总结为一句话就是:通过禁止IP频繁访问防止网站被防攻击。
    1. <?php
    2. header('Content-type: text/html; charset=utf-8');
    3. $ip=$_SERVER['REMOTE_ADDR'];//获取当前访问者的ip
    4. $logFilePath='./log/';//日志记录文件保存目录
    5. $fileht='.htaccess2';//被禁止的ip记录文件
    6. $allowtime=60;//防刷新时间
    7. $allownum=5;//防刷新次数
    8. $allowRefresh=120;//在允许刷新次数之后加入禁止ip文件中
    9.   
    10. if(!file_exists($fileht)){
    11.   file_put_contents($fileht,'');
    12. }
    13. $filehtarr=@file($fileht);
    14. if(in_array($ip."\r\n",$filehtarr)){
    15.   exit('警告:你的IP已经被禁止了!');
    16. }
    17. //加入禁止ip
    18. $time=time();
    19. $fileforbid=$logFilePath.'forbidchk.dat';
    20. if(file_exists($fileforbid)){
    21.   if($time-filemtime($fileforbid)>30){
    22.     @unlink($fileforbid);
    23.   }else{
    24.     $fileforbidarr=@file($fileforbid);
    25.     if($ip==substr($fileforbidarr[0],0,strlen($ip))){
    26.       if($time-substr($fileforbidarr[1],0,strlen($time))>120){
    27.         @unlink($fileforbid);
    28.       }else if($fileforbidarr[2]>$allowRefresh){
    29.         file_put_contents($fileht,$ip."\r\n",FILE_APPEND);
    30.         @unlink($fileforbid);
    31.       }else{
    32.         $fileforbidarr[2]++;
    33.         file_put_contents($fileforbid,$fileforbidarr);
    34.       }
    35.     }
    36.   }
    37. }
    38. //防刷新
    39. $str='';
    40. $file=$logFilePath.'ipdate.dat';
    41. if(!file_exists($logFilePath)&&!is_dir($logFilePath)){
    42.   mkdir($logFilePath,0777);
    43. }
    44. if(!file_exists($file)){
    45.   file_put_contents($file,'');
    46. }
    47. $uri=$_SERVER['REQUEST_URI'];//获取当前访问的网页文件地址
    48. $checkip=md5($ip);
    49. $checkuri=md5($uri);
    50. $yesno=true;
    51. $ipdate=@file($file);
    52. foreach($ipdate as $k=>$v){
    53.   $iptem=substr($v,0,32);
    54.   $uritem=substr($v,32,32);
    55.   $timetem=substr($v,64,10);
    56.   $numtem=substr($v,74);
    57.   if($time-$timetem<$allowtime){
    58.     if($iptem!=$checkip){
    59.       $str.=$v;
    60.     }else{
    61.       $yesno=false;
    62.       if($uritem!=$checkuri){
    63.         $str.=$iptem.$checkuri.$time."\r\n";
    64.       }else if($numtem<$allownum){
    65.         $str.=$iptem.$uritem.$timetem.($numtem+1)."\r\n";
    66.       }
    67.       else{
    68.         if(!file_exists($fileforbid)){
    69.           $addforbidarr=array($ip."\r\n",time()."\r\n",1);
    70.           file_put_contents($fileforbid,$addforbidarr);
    71.         }
    72.         file_put_contents($logFilePath.'forbided_ip.log',$ip.'--'.date('Y-m-d H:i:s',time()).'--'.$uri."\r\n",FILE_APPEND);
    73.         $timepass=$timetem+$allowtime-$time;
    74.         exit('警告:不要刷新的太频繁!');
    75.       }
    76.     }
    77.   }
    78. }
    79. if($yesno){
    80.   $str.=$checkip.$checkuri.$time."\r\n";
    81. }
    82. file_put_contents($file,$str);
    复制代码
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    132

    主题

    11

    听众

    295

    积分

    版主

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    擦汗
    2018-6-12 09:41
  • 签到天数: 273 天

    [LV.8]以坛为家I

    学习学习
    回复

    使用道具 举报

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

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部