This article provides a detailed analysis of PHP programs to prevent ddos, dns, and cluster server attacks.
The code is as follows:
// Query the forbidden IP address
$ Ip = $ _ SERVER ['remote _ ADDR '];
$ Fileht = ". htaccess2 ";
If (! File_exists ($ fileht ))
File_put_contents ($ fileht ,"");
$ Filehtarr = @ file ($ fileht );
If (in_array ($ ip. "\ r \ n", $ filehtarr ))
Die ("Warning :"."
"." Your IP address are forbided by some reason, IF you have any question Pls emill to shop@mydalle.com! ");
// Add a prohibited IP address
$ Time = time ();
$ Fileforbid = "log/forbidchk. dat ";
If (file_exists ($ fileforbid )){
If ($ time-filemtime ($ fileforbid)> 60)
Unlink ($ fileforbid );
Else {
$ Fileforbidarr = @ file ($ fileforbid );
If ($ ip = substr ($ fileforbidarr [0], 0, strlen ($ ip ))){
If ($ time-substr ($ fileforbidarr [1], 0, strlen ($ time)> 600)
Unlink ($ fileforbid );
Elseif ($ fileforbidarr [2]> 600 ){
File_put_contents ($ fileht, $ ip. "\ r \ n", FILE_APPEND );
Unlink ($ fileforbid );
} Else {
$ Fileforbidarr [2] ++;
File_put_contents ($ fileforbid, $ fileforbidarr );
}
}
}
}
// Anti-refresh
$ Str = "";
$ File = "log/ipdate. dat ";
If (! File_exists ("log ")&&! Is_dir ("log "))
Mkdir ("log", 0777 );
If (! File_exists ($ file ))
File_put_contents ($ file ,"");
$ AllowTime = 120; // Anti-refresh time
$ AllowNum = 10; // number of anti-refresh attempts
$ 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. "1 \ r \ n ";
Elseif ($ 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 ("log/forbided_ip.log", $ ip. "--". date ("Y-m-d H: I: s", time ()). "--". $ uri. "\ r \ n", FILE_APPEND );
$ Timepass = $ timetem + $ allowTime-$ time;
Die ("Warning :"."
"." Sorry, you are forbided by refreshing frequently too much, Pls wait for ". $ timepass." seconds to continue! ");
}
}
}
}
If ($ yesno) $ str. = $ checkip. $ checkuri. $ time. "1 \ r \ n ";
File_put_contents ($ file, $ str );
?>