Я подебаггил код, там прежде чем 404 или 403 страница выдается, столько запросов, столько операций со строками...
По моему скромному мнению 404 и 403 страницы должны быть минимального размера без PHP и MySQL
Что скажете, уважаемые?
Самого атаковали не раз. Средствами друпала защититься не удается. Хотя я писал как-то демон (не было возможности юзать iptables), которая брала данные с netstat по количеству соединений чекала, их проверяла свой список, если ip данного не было то прописывала в .htaccess
deny <тут_ip> (вроде так, не помню точно, но тут есть спецы htaccess)
Реализация этого метода осталась на c+bash, если найду и если надо могу выложить, хотя эт элементарно.
А по хорошему нужно делать эту же связку с фаерволом, чтоб он сам добавил правило (вместо записи в htaccess)
Quote: "ErrorDocument 404 /error.html"
При стандартном .htaccess запрос в любом случае пойдет к index.php, даже при определении ErrorDocument.
Лучше вставить в drupal_not_found() в common.inc:
<?php drupal_set_header('HTTP/1.0 404 Not Found'); watchdog('page not found', $_GET['q'], WATCHDOG_WARNING); /*!!!*/ if($_GET['q']) { print'<title>404 Not Found</title><h1>Not Found</h1><hr><p>Page not found.'; die; } /*!!!*/ ?>
тогда по битым урлам картинок, стилей и ява-скриптов, будет выдаваться содержимое файла 404.htm.
правда, работает, если это site.ru/bad.css, а если это site.ru/node/bad.css, то не работает, но все равно полезно от генераторов урлов, которые генерируют их для корня сайта.
чтобы попасть на страничку об ошибке, будь она хоть простая, будь она настраеваемая, сперва на нее человек должен попасть, а он не попадет, если в .htaccess все вызовы идут на index.php, и на страницу ошибок человек попадет, только если не будет найден index.php
Странно, у меня на локалхосте и на одном сайте на руцентре такая вставка в функцию drupal_not_found() работает нормально, а на другом выдается пустая страничка. Пока не разобрался почему, возможно из-за модуля mod_expires.
Комментарии
Вот один хрен нагенерил тучу урлов и запрашивал их с интервалом в пару секунд.
Когда я обнаружил, MySQL уже лежал.
Можете определить 404-ю страницу с помощью .htaccess
# Customized error messages.
ErrorDocument 404 /index.php
Она и определена, но проблема в том, что index.php сильно подгружает сервер, в случае намеренной загрузки сервера хулиганами
ErrorDocument 404 /error.html
сделайте страницу error.html
наверное так пойдет )
Мы с коллегой для сайта ЗАО Союзгрузпромтранс делали это так:
ErrorDocument 403 http://www.microsoft.com
ErrorDocument 404 http://www.microsoft.com
Очень забавляло : )
----------------------------------------------------------
Локализация некоторых модулей
Самого атаковали не раз. Средствами друпала защититься не удается. Хотя я писал как-то демон (не было возможности юзать iptables), которая брала данные с netstat по количеству соединений чекала, их проверяла свой список, если ip данного не было то прописывала в .htaccess
deny <тут_ip> (вроде так, не помню точно, но тут есть спецы htaccess)
Реализация этого метода осталась на c+bash, если найду и если надо могу выложить, хотя эт элементарно.
А по хорошему нужно делать эту же связку с фаерволом, чтоб он сам добавил правило (вместо записи в htaccess)
Quote: "ErrorDocument 404 /error.html"
При стандартном .htaccess запрос в любом случае пойдет к index.php, даже при определении ErrorDocument.
Лучше вставить в drupal_not_found() в common.inc:
drupal_set_header('HTTP/1.0 404 Not Found');
watchdog('page not found', $_GET['q'], WATCHDOG_WARNING);
/*!!!*/
if($_GET['q'])
{
print '<title>404 Not Found</title><h1>Not Found</h1><hr><p>Page not found.';
die;
}
/*!!!*/
?>
а в .htaacess можно написать:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !^.*\.(ico|jpg|png|gif|bmp|css|js)$
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*\.(ico|jpg|png|gif|bmp|css|js)$ nothing [L,QSA]
и создать файл nothing в корне сайта, размером в один байт.
тогда по битым урлам с этими расширениями будет выдаваться содержимое файла nothing.
или так:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !^.*\.(ico|jpg|png|gif|bmp|css|js)$
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
тогда по битым урлам картинок, стилей и ява-скриптов, будет выдаваться содержимое файла 404.htm.
правда, работает, если это site.ru/bad.css, а если это site.ru/node/bad.css, то не работает, но все равно полезно от генераторов урлов, которые генерируют их для корня сайта.
Quote: "ErrorDocument 403 http://www.microsoft.com"
и впрям забавно бедный майкрософт.ком!
Quote: "deny <тут_ip>"
Спасибо, поробуем.
а для site.ru/files/bad.css срабатывает
это видать из-за включенных FollowSymLinks
А что если через Plesk выключить "настраиваемые странички об ошибках" и просто использовать те которые предоставляет аппач из папки "error_docs".
Может это будет самым простым решением ?
Или я не прав ?
Это у нас свами VPS, а некоторые вобще на holm.ru (mysite.h17.ru) Drupal ставят : )
У них CP нет по определению : )
----------------------------------------------------------
Локализация некоторых модулей
чтобы попасть на страничку об ошибке, будь она хоть простая, будь она настраеваемая, сперва на нее человек должен попасть, а он не попадет, если в .htaccess все вызовы идут на index.php, и на страницу ошибок человек попадет, только если не будет найден index.php
Странно, у меня на локалхосте и на одном сайте на руцентре такая вставка в функцию drupal_not_found() работает нормально, а на другом выдается пустая страничка. Пока не разобрался почему, возможно из-за модуля mod_expires.