前不久一个网站竟然被攻击,数据库被刷掉了,幸好客户机器上有数据库备份。遇到这么严重的问题,必须抓紧找出漏洞,防止再次被攻击。各方面检查之后发现除了服务器需要设置正确之外,其他无从下手,只好从ip地址上来解决这种攻击的问题。
如果发现某个ip访问网站太频繁了就加入到黑名单禁止访问,这不是一个很好的办法,但情急之下向不更好的解决方式,只是权宜之计,以后再进行深入的研究一下。
这个方法总结为一句话就是:通过禁止IP频繁访问防止网站被防攻击。
php" id="highlighter_406342">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
<?php header( 'Content-type: text/html; charset=utf-8' ); $ip = $_SERVER [ 'REMOTE_ADDR' ]; //获取当前访问者的ip $logFilePath = './log/' ; //日志记录文件保存目录 $fileht = '.htaccess2' ; //被禁止的ip记录文件 $allowtime =60; //防刷新时间 $allownum =5; //防刷新次数 $allowRefresh =120; //在允许刷新次数之后加入禁止ip文件中 if (! file_exists ( $fileht )){ file_put_contents ( $fileht , '' ); } $filehtarr =@file( $fileht ); if (in_array( $ip . "\r\n" , $filehtarr )){ exit ( '警告:你的IP已经被禁止了!' ); } //加入禁止ip $time =time(); $fileforbid = $logFilePath . 'forbidchk.dat' ; if ( file_exists ( $fileforbid )){ if ( $time - filemtime ( $fileforbid )>30){ @unlink( $fileforbid ); } else { $fileforbidarr =@file( $fileforbid ); if ( $ip == substr ( $fileforbidarr [0],0, strlen ( $ip ))){ if ( $time - substr ( $fileforbidarr [1],0, strlen ( $time ))>120){ @unlink( $fileforbid ); } else if ( $fileforbidarr [2]> $allowRefresh ){ file_put_contents ( $fileht , $ip . "\r\n" ,FILE_APPEND); @unlink( $fileforbid ); } else { $fileforbidarr [2]++; file_put_contents ( $fileforbid , $fileforbidarr ); } } } } //防刷新 $str = '' ; $file = $logFilePath . 'ipdate.dat' ; if (! file_exists ( $logFilePath )&&! is_dir ( $logFilePath )){ mkdir ( $logFilePath ,0777); } if (! file_exists ( $file )){ file_put_contents ( $file , '' ); } $uri = $_SERVER [ 'REQUEST_URI' ]; //获取当前访问的网页文件地址 $checkip =md5( $ip ); $checkuri =md5( $uri ); $yesno =true; $ipdate =@file( $file ); foreach ( $ipdate as $k => $v ){ $iptem = substr ( $v ,0,32); $uritem = substr ( $v ,32,32); $timetem = substr ( $v ,64,10); $numtem = substr ( $v ,74); if ( $time - $timetem < $allowtime ){ if ( $iptem != $checkip ){ $str .= $v ; } else { $yesno =false; if ( $uritem != $checkuri ){ $str .= $iptem . $checkuri . $time . "\r\n" ; } else if ( $numtem < $allownum ){ $str .= $iptem . $uritem . $timetem .( $numtem +1). "\r\n" ; } else { if (! file_exists ( $fileforbid )){ $addforbidarr = array ( $ip . "\r\n" ,time(). "\r\n" ,1); file_put_contents ( $fileforbid , $addforbidarr ); } file_put_contents ( $logFilePath . 'forbided_ip.log' , $ip . '--' . date ( 'Y-m-d H:i:s' ,time()). '--' . $uri . "\r\n" ,FILE_APPEND); $timepass = $timetem + $allowtime - $time ; exit ( '警告:不要刷新的太频繁!' ); } } } } if ( $yesno ){ $str .= $checkip . $checkuri . $time . "\r\n" ; } file_put_contents ( $file , $str ); |
以上就是本文的全部内容,希望对大家学习有所帮助。