Heim > Backend-Entwicklung > PHP-Tutorial > 当被CC或DDOS攻击时自动封锁对方IP的function

当被CC或DDOS攻击时自动封锁对方IP的function

WBOY
Freigeben: 2016-07-25 08:45:55
Original
1125 Leute haben es durchsucht
该function用来统计每个来访者在短时间内共访问了多少次,如果超出了次数限制,则返回TRUE,之后您可以用PHP调用linux的iptables进行封锁操作就行了
我曾用过几个DDOS类的工具实际测试过,效果很不错.
对了,顺便提一下,我在代码中用文件来记录来访者ip和时间,最好是别用数据库(也不要自作聪明地存入session中),另外最好是把这个文件放入SSD硬盘上,原因嘛我就不说了,估计大家都知道
  1. /**
  2. 防止客戶端惡意重整
  3. 用法:
  4. $isf5=Fun::isf5();
  5. 返回:
  6. 返回bool[true:對方在惡意重整;false:正常訪問]
  7. /**/
  8. public static function isf5(){
  9. $_f=Run.'_isf5';
  10. if(!file_exists($_f)){
  11. file_put_contents($_f,serialize(array()),LOCK_EX);
  12. chmod($_f,0777);
  13. }
  14. $arr=unserialize(file_get_contents($_f));
  15. $arr=(!is_array($arr)) ? array() : $arr;
  16. //清理掉10秒前訪問的用戶
  17. foreach($arr as $k=>$v){
  18. if($_ENV['now']-$v['t'] >= 10){
  19. unset($arr[$k]);
  20. }
  21. }
  22. $ip='_'.(self::cur('ip'));
  23. if(!isset($arr[$ip])){
  24. $arr[$ip]['n']=1; //1s內連線的次數
  25. $arr[$ip]['t']=$_ENV['now']; //第1次訪問的時間
  26. file_put_contents($_f,serialize($arr),LOCK_EX);
  27. chmod($_f,0777);
  28. unset($_f,$arr,$ip);
  29. return FALSE;
  30. }else{
  31. if(!isset($arr[$ip]['t']) or !is_numeric($arr[$ip]['t'])){
  32. unset($arr[$ip]);
  33. file_put_contents($_f,serialize($arr),LOCK_EX);
  34. chmod($_f,0777);
  35. unset($_f,$arr,$ip);
  36. return FALSE;
  37. }
  38. if(($_ENV['now']-$arr[$ip]['t']) $arr[$ip]['n']+=1;
  39. if($arr[$ip]['n']>=5){
  40. unset($_f,$arr,$ip);
  41. return TRUE;
  42. }else{
  43. file_put_contents($_f,serialize($arr),LOCK_EX);
  44. chmod($_f,0777);
  45. unset($_f,$arr,$ip);
  46. return FALSE;
  47. }
  48. }else{ //若距離上次訪問的時間已經超過1s,則重新計數
  49. $arr[$ip]['n']=1;
  50. $arr[$ip]['t']=$_ENV['now'];
  51. file_put_contents($_f,serialize($arr),LOCK_EX);
  52. chmod($_f,0777);
  53. unset($_f,$arr,$ip);
  54. return FALSE;
  55. }
  56. }
  57. unset($_f,$arr,$ip);
  58. return FALSE;
  59. }
复制代码
DDOS, function


Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage