前不久一个网站竟然被攻击,数据库被刷掉了,幸好客户机器上有数据库备份。遇到这么严重的问题,必须抓紧找出漏洞,防止再次被攻击。各方面检查之后发现除了服务器需要设置正确之外,其他无从下手,只好从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 );
|
以上就是本文的全部内容,希望对大家学习有所帮助。