Обсуждение темы «Комплексная защита сайта или блога на WordPress»
1 316 11

У меня есть привычка проверять многие сайты на возможность взлома. Точнее сказать — на предмет его защищенности. Я не имею ввиду, что я серфю Интернет в поисках слабозащищенных сайтов, скорее…

ОБСУЖДЕНИЕ
11 комментариев
Order Deny,Allow
Deny from all

С этим та же история. 🙂

RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a  tag in URL
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable
via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable
via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with
403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]

Сделал это — и снова сайт завис. 🙂
Смешно. 🙂

Попасть в админку не проблема:
http://имя_сайта/wp-admin/index.php

Да это еще и не все. К примеру, вывалят данные о версии — фид блога, сайтмет от Гугла и Дагона, заодно проставятся подключаемые модули Ява. Да еще мало ли мест откуда он засветится.

Спасибо! Как раз актуально.
Правда. Рубим типичные эксплойты, как сделано в Джумле в .htaccess. Это меня тоже повалило. Пришлось откатить.

GPS

Устранить тоже легко. Поместите пустой файл index.php или index.html в папки

1. htaccess

Options All -Indexes

, как говорилось Вами ниже, достаточно.

RewriteEngine On

к листингу директорий отношения не имеет.

2. Хорошей практикой является переименование административной папки или прикрытие ее паролем — меньше соблазнов возникает.

3. Рубим типичные эксплойты, как сделано в джумле. В .htaccess

RewriteEngine on
# Block out any script trying to base64_encode crap to send
via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable
via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable
via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with
403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]

4. Запрещаем прямой доступ к папкам, содержащим библиотеки движка и другие файлы, которые не запрашиваются браузерами напрямую(методами GET/POST). Тот же .htaccess в папке root/include:

<Files *.php>
Order Deny,Allow
Deny from all
</Files>

В корневой папке (если есть локальный php.ini):

<Files php.ini> #

или вообще все — *.ini

Order Deny,Allow
Deny from all
</Files>

Список запрещенных масок расширяем по необходимости.

5. В php отключаем вывод ошибок. Демонстрация «споткнувшегося» sql запроса может быть настоящим подарком хакеру — если движок нетипичный или доработанный:
в локальном php.ini

display_errors = Off

При этом, логом ошибок не брезгуем. Мало ли…

error_log = /path_to_your_home/php_errors.log

6. Из разряда «авось пригодится»Апач позволяет ограничивать допустимые методы протокола http. Например, отключаем метод CONNECT в .htaccess

<Limit CONNECT>
Order Deny,Allow
Deny from all
</Limit>

Ага, сделал я:

Options All -Indexes

И сайт накрылся!
Хорошие советы, надо же!

По всей видимости, Вы смотрите не туда. Версия WP удаляется из HTML кода страницы. В панели администратора версия останется видна.

Если же Вы сделали все правильно, но именно в коде страницы версия WordPress осталась, то скорее всего у вас включено кэширование страниц. В таком случае дождитесь обновления кэша или очистите его самостоятельно.

Вставляю код в функции и все равно показывает версию…

dd

GPS грамотный комментарий написал, а вам Kursak надо поднабраться опыта, не может сайт повиснуть из-за Options All -Indexes

Дима

Если залить в wp-admin пустой index.html, то как тогда в админку попасть? Какое есть решение?

Оставьте комментарий
Ваш комментарий появится после проверки модератором