Сейчас: 23:05:05   23-го апреля 2024 г.
UsefulScript.ruСкриптыЗащита сайтаСтраничка для 403 ошибки
5
20

Собственная странички 403 и запись логов

Все уже наверно сталкивались с ситуацией, когда при посещении какого-либо сайта выскакивает надпись Forbidden You don't have permission to access on this server и нужный сайт не загружается.


Данная ситуация возможна в том случае, если Вы пытаетесь обратиться к ресурсам сайта, доступ к которым запрещен, либо Ваш IP адрес был забанен на данном сайте. В данном случае код ответа сервера будет равен 403. Проще говоря, сервер возвращает ошибку 403 (или страничку 403).


В данной теме мы предлагаем Вам создать свою собственную страничку 403 для отслеживания активности заблокированных IP адресов и IP адресов, пытающихся обратиться к ресурсам, доступ к которым закрыт.


Своя собственная страничка 403 может быть полезна для тех, кто хочет знать, прекратились ли обращения к страницам сайта с забаненных IP адресов или нет, и кто пытается получить доступ к файлам с ограниченным доступом.


Для начала, давайте посмотрим, как выглядит исходный код странички, которая появляется при попытке доступа к файлу .htacces:

HTML код:
<!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 код:
<?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 коде замените строчку:

HTML код:
<p>You don't have permission to access /.htacces on this server.</p>
на такую:
HTML код:
<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 если сервер у Вас слабый.

Дата создания: 16:12:47 13.06.2013 г.
Посещений: 8263 раз(а).

Комментарии посетителей (8 шт.):
Виталий
0
# 3420
(10:53:10  18.09.2016 г.)

Здравствуйте. Скрипт работает, если в htaccess прописать ErrorDocument 403 /error403.php и соответственно сам файл находится в корне диска, а если файл поместить в папку, то не работает, например, ErrorDocument 403 /php/error403.php. Может для php кода прописать абсолютный адрес. Страница 404 у меня находится в папке и все работает, а с 403 пока не выходит... Если страница в корне, то OK но стоит поместить в папку не работает. Просьба помочь разобраться в этом вопросе. Заранее благодарен.
Ответить

Владимир
0
# 3421
(15:19:03  19.09.2016 г.)

Протестировал скрипт. Файл находится в корне и для страниц, находящихся там же, все работает, но для страниц в папках не работает, появляется обычное сообщение: Forbidden You don't have permission to access on this server. В чем проблема, сам пока не разобрался, работа над скриптом положительных результатов не дала...
Ответить

Administrator
0
# 3422
(20:08:42  19.09.2016 г.)

Скрипт записи логов не работает? Так поместите файл logs_403.txt в папку со страничкой 403 ошибки и все. Если необходимо чтобы файл error403.php лежал в папке, а logs_403.txt - в корне сайта, то укажите в скрипте путь к файлу таким образом: "../logs_403.txt".
Ответить

Виталий
0
# 3505
(13:00:37  12.10.2016 г.)

Здравствуйте, если файл в папке, то не работает...
Выдается ошибка:
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");
Ответить

Виталий
0
# 3516
(10:13:32  20.10.2016 г.)

Здравствуйте, подскажите пожалуйста, как сделать, чтобы страница 403 лежала в папке и работала, как для корневых, так и для страниц в папке. В htaccess прописал ErrorDocument 403 /folder/403.php и могу изменить путь к logs_403.txt, тут не проблема.
В данный момент, если страница в корне, то работает только для корневых страниц, а если в папке, то не работает совсем...
404 страница, к примеру, лежит в папке и работает отлично для всех страниц, а с 403 не получается, чтобы страница лежала в папке и работала для всех страниц...
Если у вас будет время гляньте пожалуйста, что можно сделать, пробовал абсолютный адрес прописывать, не работает... а все страницы из папок в корень "класть" слишком много исправлений делать придется...
Заранее благодарен.
Ответить

Administrator
0
# 3517
(14:17:03  20.10.2016 г.)

Возможно, дело в настройках хостинга. Например, когда мы сменили хостинг, у нас вообще перенаправление ErrorDocument 403 /error403.php перестало работать.
Ответить

Виталий
0
# 3518
(15:44:44  20.10.2016 г.)

Здравствуйте, у меня другая проблема. Все проверяю на локальном сервере и такая вот проблема, описанная в сообщении #3516, вот и думал, что может скрипт работает только для корневых страниц, что сейчас и происходит...

$str.=date("H:i:s d m Y")." | ".htmlspecialchars($_SERVER['REMOTE_ADDR']." | ".$_SERVER['HTTP_USER_AGENT']." | ".$_SERVER['REQUEST_URI']."\r\n");

Пытался в этих строчках делать изменения, но тут все в порядке, не пойму страница 404 работает отлично для всех страниц, а с 403 такая проблема, сейчас не сколько нужно а интересно как это реализовать...
Ответить

Виталий
0
# 3424
(12:21:02  20.09.2016 г.)

Здравствуйте, скрипт записи логов работает, все нормально. В данный момент страница и скрипт записи логов находятся в корне диска и для страниц в корне все работает..., но для страниц в папках не работает, вот я и пытаюсь разобраться где собака зарыта...
Ответить

Закрыть
Ваше имя:
845 + 7 =
Добавить комментарий:
Ваше имя:
845 + 7 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 3

Какой браузер Вы используете?