CCやDDOSの攻撃を受けた際に相手のIPを自動的にブロックする機能

WBOY
リリース: 2016-07-25 08:45:55
オリジナル
1110 人が閲覧しました
DDOS、関数
この関数は、各訪問者が短期間に訪問した回数をカウントするために使用され、訪問数が制限を超えた場合は TRUE を返します。その後、PHP を使用して Linux の iptables を呼び出してブロック操作を実行できます。私は実際に DDOS ツールをいくつか使用しましたが、結果は非常に良好でした。ちなみに、コード内でファイルを使用して訪問者の IP と時間を記録しています。データベースは使用しないのが最善です。賢明にはセッションに保存しないでください) さらに、このファイルは SSD ハード ドライブに保存するのが最善です。その理由については、誰もが知っていると思います。

/**
    クライアント側での悪意のある再編成を防ぐ
  1. 使用法:
  2. $isf5=Fun::isf5();
  3. Return:
  4. Return bool[true: 相手が悪意を持って再編成している; false: 通常のアクセス]
  5. /**/
  6. パブリック静的関数 isf5(){
  7. $_f=Run.'_isf5';
  8. if(!file_exists($_f)){
  9. file_put_contents($_f,serialize(array) ()),LOCK_EX);
  10. chmod($_f,0777);
  11. }
  12. $arr=unserialize(file_get_contents($_f));
  13. $arr=(!is_array($arr)) array() : $arr ? ;
  14. //10 秒前に訪問したユーザーをクリアします
  15. foreach($arr as $k=>$v){
  16. if($_ENV['now']-$v['t'] >= 10 ){
  17. unset($arr[$k]);
  18. }
  19. }
  20. $ip='_'.(self::cur('ip'));
  21. if(!isset($arr[$ip ])){
  22. $arr[$ip]['n']=1; // 1 秒以内の接続数
  23. $arr[$ip]['t']=$_ENV['now']; //初回アクセス時刻
  24. file_put_contents($_f,serialize($arr),LOCK_EX);
  25. chmod($_f,0777);
  26. unset($_f,$arr,$ip);
  27. return FALSE;
  28. }else {
  29. if(!isset($arr[$ip]['t']) または !is_numeric($arr[$ip]['t'])){
  30. unset($arr[$ip]);
  31. file_put_contents ( $_f,serialize($arr),LOCK_EX);
  32. chmod($_f,0777);
  33. unset($_f,$arr,$ip);
  34. return FALSE;
  35. }
  36. if(($_ENV['now ' ]-$arr[$ip]['t']) <= 1){ //前回のアクセスからの時間が1秒以内の場合は回数のみ累積します
  37. $arr[$ip] ['n'] +=1;
  38. if($arr[$ip]['n']>=5){
  39. unset($_f,$arr,$ip);
  40. return TRUE;
  41. }else{
  42. file_put_contents($_f ,serialize($arr),LOCK_EX);
  43. chmod($_f,0777);
  44. unset($_f,$arr,$ip);
  45. return FALSE;
  46. }
  47. }else{ //If前回の訪問からの距離 時間が 1 秒を超えた場合は、再度カウントします
  48. $arr[$ip]['n']=1;
  49. $arr[$ip]['t']=$_ENV['now'] ;
  50. file_put_contents($_f, Serialize($arr),LOCK_EX);
  51. chmod($_f,0777);
  52. unset($_f,$arr,$ip);
  53. return FALSE;
  54. }
  55. }
  56. unset($ _f,$arr,$ip );
  57. return FALSE;
  58. }
コードをコピー
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!