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

Я заметил, что многие мои читатели сильно пренебрегают безопасностью своих блогов, не делая некоторых шагов по самостоятельной защите wordpress’а после установки или обновления. Это имеет просто массовый характер!

Во-первых
Часто взломщики (особенно студенты и школьники, насмотревшиеся фильмов типа “Хакер”) для взлома блога на WordPress используют данные о его версии. Версию блога можно узнать разными способами.

Например, с помощью файлов readme.html и license.txt расположенных в корне сайта.
Убедитесь сами:
SeoBlondinka.ru,
Krutikoff.com.ua,
TiamatInc.ru,
Online-delo.ru,
Trakhtenberg.info,
Dimoning.ru
и т.д.
Не буду выдавать все. Самое удивительное, что многие из этих вебмастеров уже не первый год в Интернете, но допускают такие серьезные ошибки. Ребята! Давайте устраняйте ваши уязвимости!

Для этого вам надо просто удалить файлы readme.html и license.txt через FTP в корневике блога. Скорее всего это будет папка имя_сайта/public_html/

Для проверки своего блога на наличие подобного рода уязвимостей введите в адресную строку браузера адрес: http://имя_сайта/readme.html

Кроме того, сам WorPress пишет свою версию прямо в код страницы. В заголовке HEAD.
Чтобы убрать ее оттуда, пропишите в функции темы functions.php строку

<?php remove_action (’wp_head’, ‘wp_generator’); ?>

Во-вторых
Служебные папки движка тоже могут представлять некоторую опасность. Злоумышленник может посмотреть какие (например) плагины вы используете и подобрать “ключик” к вашему блогу.

Например: Spryt.ru, Online-delo.ru и т.д.

Устранить тоже легко. Поместите пустой файл index.php или index.html в папки имя_сайта/wp-admin/, имя_сайта/wp-content/, имя_сайта/wp-includes/. Или сделайте как я. Поместите такой вот интересный файл. Прикольно, да? Качайте и пользуйтесь.

Также рекомендую дописать в ваш файл .htaccess, который тоже лежит в корне сайта строки

Options All -Indexes
RewriteEngine On

Это защитит другие ваши папки от просмотра чужими людьми.

Для проверки своего (или чужого) блога на такую уязвимость введите в адресную строку браузера адрес: http://имя_сайта/wp-admin/, http://имя_сайта/wp-content/, http://имя_сайта/wp-includes/ и т.д.

Читая этот пост, я надеюсь, что авторы указанных выше блогов в качестве примера, уже устранили свои уязвимости. Остальным могу посоветовать исправить свои.

RSS-Feed RSS-2-mail Twitter G-bookmarks BobrDobr Memori MoeMesto

Опубликовано: Суббота, 14 марта 2009 в 17:41
Рубрика: Оптимизация WordPress
Комментариев: 10
Читать на:

Комментариев: 10

  1. 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>

  2. Kursak (подписан на комментарии)

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

    Options All -Indexes

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


  3. Kursak (подписан на комментарии)
    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]

    Сделал это - и снова сайт завис. :)
    Смешно. :)


  4. Курсак (подписан на комментарии)
    Order Deny,Allow
    Deny from all

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


  5. Екатерина

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


  6. Ай Пи Мани

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

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


  7. dd

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


  8. Дима

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


  9. Ай Пи Мани

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


  10. oldvovk (подписан на комментарии)

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


Есть что сказать? Не молчи!

Пожалуйста, пишите по теме.
Комментарии о том, какой хороший сайт или его автор расцениваются как СПАМ и беспощадно удаляются.
Спасибо за понимание.

Для вставки php-кода используйте тег:
<pre lang="php">php-код</pre>


 Я не СПАМер!