ホームページ > バックエンド開発 > PHPチュートリアル > Ddos、DNS、クラスター攻撃を防ぐための PHP 実装コード

Ddos、DNS、クラスター攻撃を防ぐための PHP 実装コード

WBOY
リリース: 2016-07-25 08:58:34
オリジナル
1031 人が閲覧しました
  1. /**
  2. * DDO、​​DNS、クラスター、その他の攻撃を防止します
  3. * bbs.it-home.org を編集します
  4. */
  5. //查询禁止IP
  6. $ip =$_SERVER['REMOTE_ADDR'];
  7. $fileht=".htaccess2";
  8. if(!file_exists ($fileht))
  9. file_put_contents($fileht,"");
  10. $filehtarr=@file($fileht);
  11. if(in_array($ip."rn",$filehtarr))
  12. die("警告:". "
    "."あなたの IP アドレスは何らかの理由で禁止されています。ご質問がある場合は、shop@jbxue.com までお問い合わせください!");
  13. // 禁止された IP を追加します
  14. $time=time();
  15. $fileforbid="log/forbidchk.dat";
  16. if(file_exists($fileforbid)) {
  17. if($time-filemtime($fileforbid)>60)
  18. unlink($fileforbid);
  19. else {
  20. $fileforbidarr=@file($fileforbid);
  21. if($ip==substr($fileforbidarr[0],0,strlen($ip))) {
  22. if($ time-substr($fileforbidarr[1],0,strlen($time))>600)
  23. unlink($fileforbid);
  24. elseif($fileforbidarr[2]>600) {
  25. file_put_contents($fileht,$ip) ."rn",FILE_APPEND);
  26. unlink($fileforbid);
  27. } else {
  28. $fileforbidarr[2]++;
  29. file_put_contents($fileforbid,$fileforbidarr);
  30. }
  31. }
  32. }
  33. }
  34. //防御新
  35. $str="";
  36. $file="log/ipdate.dat";
  37. if(!file_exists("log")&&!is_dir("log"))
  38. mkdir("log",0777);
  39. if(!file_exists($file))
  40. file_put_contents($file,"");
  41. $allowTime = 120;//防刷新時間
  42. $allowNum=10;//防刷新次数
  43. $uri=$_SERVER['REQUEST_URI '];
  44. $checkip=md5($ip);
  45. $checkuri=md5($uri);
  46. $yesno=true;
  47. $ipdate=@file($file);
  48. foreach($ipdate as $k=> ;$v) {
  49. $iptem=substr($v,0,32);
  50. $uritem=substr($v,32,32);
  51. $timetem=substr($v,64,10);
  52. $numtem =substr($v,74);
  53. if($time-$timetem<$allowTime) {
  54. if($iptem!=$checkip)
  55. $str.=$v;
  56. else {
  57. $yesno=false;
  58. if($uritem!=$checkuri)
  59. $str.=$iptem.$checkuri.$time."1rn";
  60. elseif($numtem<$allowNum)
  61. $str.=$iptem.$uritem.$timetem. ($numtem+1)."rn";
  62. else {
  63. if(!file_exists($fileforbid)) {
  64. $addforbidarr=array($ip."rn",time()."rn",1);
  65. file_put_contents($fileforbid,$addforbidarr);
  66. }
  67. file_put_contents("log/forbided_ip.log",$ip."--".date("Y-m-d H:i:s",time())."--" .$uri."rn",FILE_APPEND);
  68. $timepass=$timetem+$allowTime-$time;
  69. die("警告:"."
    "."申し訳ありませんが、頻繁に更新しすぎることは禁止されています。続行するには ".$timepass." 秒待ってください!");
  70. }
  71. }
  72. }
  73. }
  74. if($yesno) $str.=$checkip.$checkuri.$time."1rn";
  75. file_put_contents( $file,$str);
  76. ?>
复制發


関連ラベル:
dns
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート