View file template/antidos.php

File size: 3.89Kb
<?php
// mod by Golem http://veplog.ru

if (!defined("BASEDIR")) { header("Location:../index.php"); exit; }

if(isset($_SERVER['PHP_SELF'])){$php_self = check($_SERVER['PHP_SELF']);}
if(isset($_SERVER['REQUEST_URI'])){$request_uri = check(urldecode(substr(strtok($_SERVER['REQUEST_URI'],'S'),1)));} else {$request_uri="index.php";}
if(isset($_SERVER['HTTP_REFERER'])){$http_referer = check(urldecode(strtok($_SERVER['HTTP_REFERER'],'S')));} else {$http_referer="Не определено";}
if(isset($_SESSION['log'])){$username=$_SESSION['log'];}else{$username=$config_guestsuser;}

$ip_addr = preg_replace('|[^0-9\.]|', '', $_SERVER['REMOTE_ADDR']);
if ($ip_addr==""){
echo '<b>Ошибка! У вас отсутствует IP-адрес (REMOTE_ADDR)</b>'; exit;
}

//------------------------- Очистка старых файлов ---------------------------//
if ($opendir = opendir(BASEDIR."local/datados")) {
while (false !== ($doslog = readdir($opendir))) {
if ($doslog != "." and $doslog != "..") {

$file_array_filemtime = filemtime(BASEDIR."local/datados/$doslog");
if ($file_array_filemtime < ($time-60)) {
unlink(BASEDIR."local/datados/$doslog"); 
}}}}

//-------------------------- Проверка на время -----------------------------//
$logfiles = BASEDIR."local/datados/".$ip_addr.".dat";

if(file_exists($logfiles)){
$file_dos_time = file($logfiles);
$file_dos_str= explode("|",$file_dos_time[0]);

if($file_dos_str[1] < ($sitetime-60)) {
unlink($logfiles);
}}

//------------------------------ Запись логов -------------------------------//
$write = '|'.$sitetime.'|Время: '.date("Y-m-d / H:i:s",$sitetime).'|Browser: '.$brow.'|Referer: '.$http_referer.'|URL: '.$request_uri.'|Пользователь: '.$username.'|';
$fp=fopen($logfiles,"a+");
flock ($fp,LOCK_EX);
fputs($fp,"$write\r\n");
flock ($fp,LOCK_UN);
fclose($fp);
@chmod ($fp, 0666);
@chmod ($logfiles, 0666);

//----------------------- Автоматическая бликировка ------------------------//
if (count(file($logfiles)) > $config_doslimit && $config_doslimit>0) {

unlink($logfiles);

$banlines=file(BASEDIR."local/ban.dat");
foreach($banlines as $banvalue){
$bancell = explode("|", $banvalue);
$banarray[]=$bancell[1];
}


//-------------------------- Запись IP в базу --------------------------------//
if(!in_array($ip_addr,$banarray)){

$fp=fopen(BASEDIR."local/ban.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,"|$ip_addr|\r\n"); 
fflush ($fp); 
flock ($fp,LOCK_UN);                                           
fclose($fp);  

$logdat = BASEDIR."local/datalog/ban.dat";
$hostname = gethostbyaddr($ip_addr);

$write = '|Заблокирован доступ для IP|IP: '.$ip_addr.'|Время: '.date("Y-m-d / H:i:s",$sitetime).'|Хост: '.$hostname.'|Referer: '.$http_referer.'|Browser: '.$brow.'|URL: '.$request_uri.'|Пользователь: '.$username.'|';

$fp=fopen($logdat,"a+");
flock ($fp,LOCK_EX);
fputs($fp,"$write\r\n");
flock ($fp,LOCK_UN);
fclose($fp);
chmod ($fp, 0666); 
chmod ($logdat, 0666); 

$file=file($logdat); 
$i = count($file);
if ($i>=$config_maxlogdat) {
$fp=fopen($logdat,"w");
flock ($fp,LOCK_EX);
unset($file[0],$file[1]);
fputs($fp, implode("",$file));
flock ($fp,LOCK_UN);
fclose($fp);
}}}

//-------------------------- Запрет на вход --------------------------------//
$old_ips = file(BASEDIR."local/ban.dat");
foreach($old_ips as $old_ip_line){
$ip_arr = explode("|", $old_ip_line);

$ip_check_matches = 0;
$db_ip_split = explode(".", $ip_arr[1]);
$this_ip_split = explode(".", $ip_addr);

for($i_i=0;$i_i<4;$i_i++){
if ($this_ip_split[$i_i] == $db_ip_split[$i_i] or $db_ip_split[$i_i] == '*') {
$ip_check_matches += 1;}}

if ($ip_check_matches == 4) {
if($php_self!='/pages/banip.php'){header ("Location: ".BASEDIR."pages/banip.php?".SID);  exit;}} //бан по IP
}

?>