Собственная странички 403 и запись логов
Все уже наверно сталкивались с ситуацией, когда при посещении какого-либо сайта выскакивает надпись Forbidden You don't have permission to access on this server и нужный сайт не загружается.
Данная ситуация возможна в том случае, если Вы пытаетесь обратиться к ресурсам сайта, доступ к которым запрещен, либо Ваш IP адрес был забанен на данном сайте. В данном случае код ответа сервера будет равен 403. Проще говоря, сервер возвращает ошибку 403 (или страничку 403).
В данной теме мы предлагаем Вам создать свою собственную страничку 403 для отслеживания активности заблокированных IP адресов и IP адресов, пытающихся обратиться к ресурсам, доступ к которым закрыт.
Своя собственная страничка 403 может быть полезна для тех, кто хочет знать, прекратились ли обращения к страницам сайта с забаненных IP адресов или нет, и кто пытается получить доступ к файлам с ограниченным доступом.
Для начала, давайте посмотрим, как выглядит исходный код странички, которая появляется при попытке доступа к файлу .htacces:
<!DOCTYPE html>
<html lang="en"><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /.htacces on this server.</p>
</body></html>
Для создания своей собственной странички 403, создайте файл (например, error403.php). Внутрь данного файла поместите выше приведенный HTML код с сообщением, после которого добавьте PHP код, который будет писать логи:
<?php
if (filesize("logs_403.txt")<99999) {
$fh=fopen("logs_403.txt","a+");
flock($fh,LOCK_EX);
fseek($fh,0);
while (!feof($fh)) $str.=fread($fh,8192);
$str.=date("H:i:s d m Y")." | ".htmlspecialchars($_SERVER['REMOTE_ADDR']." | ".
$_SERVER['HTTP_USER_AGENT']." | ".$_SERVER['REQUEST_URI']."\r\n");
ftruncate($fh,0);
fwrite($fh,$str);
flock($fh,LOCK_UN);
fclose($fh);
}
?>
Для того чтобы страничка 403 стала универсальной и выдавала в сообщение URL, к которому закрыт доступ, в HTML коде замените строчку:
<p>You don't have permission to access /.htacces on this server.</p>
<p>You don't have permission to access /
<?php echo strtok(basename($_SERVER['REQUEST_URI']), '?').' on this server';?>
Теперь Вам остается лишь перенаправить посетителя со стандартной странички 403 на Вашу собственную. Для этого в файле .htacces добавьте всего одну строчку:
ErrorDocument 403 /error403.php
Все. Теперь все IP адреса, доступ которым запрещен на сайт и IP адреса, которые пытаются получить доступ к защищенным ресурсам сайта, будут попадать в файл логов logs_403.txt с указанием времени, User_Agent-а и URL, по которому они пытались получить доступ.
Обращаем Ваше внимание на то, что мы специально добавили в PHP код дополнительное условие проверки if (filesize("logs_403.txt")<99999) для того, чтобы при быстром росте размера файла логов и превышении им размера в 99999 байт, логи в файл перестали записываться для снижения нагрузки на сервер.
При всем при этом стоит учитывать, что предлагаемая нами собственная страничка 403 при очень частом обращении к ней повысит нагрузку на сервер, так что смотрите сами, стоит ли Вам создавать свою собственную страничку ошибки 403 если сервер у Вас слабый.
Перед публикацией все комментарии проходят обязательную модерацию!
Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Выдается ошибка:
Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.
Эта проблема может возникать при отключении или запрещении принятия кук.
В htaccess, прописывал как относительный, так и абсолютный адрес, нет результата...
ErrorDocument 403 /php/403.php
ErrorDocument 403 http://mysite.net/php/403.php
Страница имеется 404.php все работает отлично.
Если 403.php поместить в корень, то для корневых страниц работает, а для вложенных нет, может быть проблема в строчках:
$str.=date("H:i:s d m Y")." | ".htmlspecialchars($_SERVER['REMOTE_ADDR']." | ".$_SERVER['HTTP_USER_AGENT']." | ".$_SERVER['REQUEST_URI']."\r\n");
В данный момент, если страница в корне, то работает только для корневых страниц, а если в папке, то не работает совсем...
404 страница, к примеру, лежит в папке и работает отлично для всех страниц, а с 403 не получается, чтобы страница лежала в папке и работала для всех страниц...
Если у вас будет время гляньте пожалуйста, что можно сделать, пробовал абсолютный адрес прописывать, не работает... а все страницы из папок в корень "класть" слишком много исправлений делать придется...
Заранее благодарен.
$str.=date("H:i:s d m Y")." | ".htmlspecialchars($_SERVER['REMOTE_ADDR']." | ".$_SERVER['HTTP_USER_AGENT']." | ".$_SERVER['REQUEST_URI']."\r\n");
Пытался в этих строчках делать изменения, но тут все в порядке, не пойму страница 404 работает отлично для всех страниц, а с 403 такая проблема, сейчас не сколько нужно а интересно как это реализовать...