Безопасность в WordPress: как защитить свой блог от хакеров (часть 1)

Дата публикации:Август 25, 2011

WordPress является прекрасной платформой для размещения различных проектов. Успех WordPress во многом обеспечен активной поддержкой, исходящей со стороны сообщества разработчиков программного обеспечения с открытым исходным кодом. Однако стоит признать, что открытость исходников зачастую приводит и к заинтересованности со стороны хакеров, которыми движут далеко не благие намерения. Сегодня WordPress используют миллионы пользователей по всему миру, поэтому велика вероятность того, что какой-либо из веб-мастеров не предпринял необходимы меры предосторожности, не установил защиту от посторонних глаз, что в конечном счете отзовется плачевными результатами.

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

Проверка критических компонентов: закрываем основные ходы

Среди основных действий, которые позволяют установить элементарный уровень безопасности, можно отметить следующие:

  • Своевременное обновление системы WordPress и установленных в ней плагинов. Поскольку WordPress обладает открытым исходным кодом, все уязвимости, существующие в различных версиях этой CMS, досконально известны. Хакерам достаточно узнать номер версии, после чего они уже смогут отыскать верный путь ко взлому сайта.
  • Защита файла wp-config.php. Защитить файл wp-config.php от посторонних глаз можно следующими способами: поставить для него права доступа 440 или 400 (зависит от вашего сервера); переместить wp-config.php выше файла public_html. Чтобы переместить wp-config.php, необходимо создать новый PHP файл с произвольным именем, в котором будет содержаться вся информация, закрытая от редактирования, а в старом файле wp-config прописать следующие строки:

    <?php 
     require_once('/home/USERNAME/NEWCONFIGNAME.php');
     if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/');
     require_once(ABSPATH . 'wp-settings.php');
    

    Не забудьте указать свои собственные USERNAME и NEWCONFIGNAME.

  • Установка корректных прав доступа к файлам WordPress. Если говорить кратко, то это означает, что для всех папок должен стоять chmod 755, а для всех файлов — chmod 644.

Помимо всего прочего, важно:

  • Не устанавливать плагины, которые используют base64_urlencode. Это легко можно определить, взглянув на исходный код плагина.
  • Если ваша тема использует скрипт timthumb.php, проверьте его версию: она должна быть не ниже 2.0. Не так давно в этом скрипте была обнаружена серьезная ошибка безопасности, которая позволяла хакерам получить доступ к информации. Скачать актуальную версию скрипта можно по следующей ссылке: timthumb.

Использование файла .htaccess: настройка защиты

На первый взгляд файл .htaccess может показаться устрашающим, что в какой-то степени справедливо. Начинающий пользователь вряд ли сможет разобраться в нагромождениях различных инструкций. Файлы .htaccess позволяют управлять доступом к сайту: сюда относится настройка перенаправления посетителей, переименование файлов и каталогов, блокировка IP-адресов и рефереров, запрет доступа к файлам и многое другое. Перед тем, как вносить изменения в .htaccess, обязательно убедитесь в том, что у вас есть резервная копия этого файла, иначе любая случайная ошибка может привести к полному отказу сайта.

Несмотря на то что в природе есть множество WordPress плагинов, позволяющих проводить редактирование .htaccess, я настоятельно рекомендую выполнять все действия вручную. Почему? Если хакер получит доступ к консоли WordPress, он сможет нанести критический урон сайту через редактор .htaccess, который обеспечивается плагинами. Не стоит упрощать жизнь взломщикам.

Ниже я привел обязательный минимум, который должен присутствовать в файле .htaccess.

Отключение просмотра директорий:

# disable directory browsing
 Options All -Indexes 

Отключение сигнатуры сервера:

# disable the server signature
 ServerSignature Off

Блокировка нежелательных юзер-агентов:

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

RewriteEngine On 
 RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Custo [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^HMView [OR] 
 RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR] 
 RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR] 
 RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^larbin [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Wget [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Widow [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR] 
 RewriteCond %{HTTP_USER_AGENT} ^Zeus 
 RewriteRule ^.* - [F,L]

Блокировка доступа к WP-Config

# protect wpconfig.php

 order allow,deny
 deny from all

Блокировка доступа к .htaccess

order allow,deny
 deny from all
 satisfy all

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

Плагины, заботящиеся о безопасности блога

Здесь мы рассмотрим полезные плагины, которые позволят вам надежно защитить свой блог от хакерских атак.

  • BulletProof Security. Позволяет защитить блог от кросс-серверных скриптов, SQL-инъекций, base64, CSRF, а также надежно сохранить жизненно важные файлы вашего сервера, такие как .htaccess и php.ini.
  • Login Lock Down — Записывает IP-адреса при неудачных попытках входа в систему. Если число попыток входа было превышено, IP-адрес блокируется на заданный промежуток времени. Прекрасное средство для предотвращения брутфорса.
  • Block Bad Queries (BBQ) — Плагин препятствует выполнению злонамеренных запросов eval и base64. Обязательная необходимость в том случае, если не установлена защита BulletProof Security.

http://jmwebdev.com/wordpress-articles/secure-wordpress-blog-hackers.php

Поделиться

9 комментариев

  1. HotIce says:

    Отключение просмотра категорий: — не совсем понятно, почему "категорий"? Директива выключает просмотр директорий. Очепятка?

    Простынь с юзерагентами зачетная. Интересно бы узнать, насколько такое правило тормозит обработку запроса. У меня простынь поменьше, но блокирует нескольких поисковых ботов.

    • Architect Of Ruin says:

      Хотел написать каталогов, а написал категорий. Да, пора больше спать и меньше работать)

  2. А есть ли какие-то сложности в настройке плагина BulletProof Security? И есть ли плагин на русском? Спасибо

    • Architect Of Ruin says:

      Сложностей не должно возникнуть. Если появятся, то пишите, поставлю его тоже у себя и проверю. По крайней мере, на сайте хранилища плагинов WordPress сказано, что он полностью совместим с текущей версией 3.3.1. Плагинов на русском не знаю, но вообще плагинов для защиты блога очень много, обычно у самых популярных есть переводы.

  3. lena says:

    Честно. Вы внушаете доверие. Уже давно пасусь у Вас.

    А можно просто взять и копирнуть ваш ф..htaccess?

    89 ваших строчек и все?

    И плагин BulletProof Security собираюсь завтра ставить.

    Можно вы побудете на горячей линии? Или это уж совсем ни в какие ворота?

    C уважением.

    • Architect Of Ruin says:

      89 строчек копировать не обязательно, это для примера блокировки различных нежелательных юзер-агентов. Вообще, достаточно просто поставить запреты на редактирование файлов. Я на горячей линии в комментариях, если есть вопросы, то задавайте ;)

  4. lena says:

    Таки побоялась я BulletProof Security установить. Трудности перевода. Попытаюсь с .htaccess работать.

  5. lena says:

    Вопрос. В "WordPress Setup Checklist" (http://www.wpmentor.net/checklist/) :

    пункт 30 — Delete WordPress Installation Files

    The following files can be deleted using your FTP client:

    install.php file in the wp-admin folder of your WordPress website

    readme.html in the root folder of your WordPress website

    These files can provide are a security risk and do not need to be there for your WordPress website to function correctly.

    и

    пункт 31 — Move wp-config.php.You can move the wp-config.php file to the directory above your WordPress install. This means for a site installed in the root of your webspace, you can store wp-config.php outside the web-root folder and it will not be available to the web.

    Note that wp-config.php can be stored ONE directory level above the WordPress (where wp-includes resides) installation folder. Use your FTP client to move wp-config.php."

    Вопросы:

    1. Могу ли я удалить ф.install и readme? А если я буду обновлять версию WP-мне опять их удалять?

    2. Здесь сказано, что я могу просто передвинуть config. Без создания нового файла, как пишите вы. Как сделать?

    Надеюсь на ответ.

    • Architect Of Ruin says:

      1. Удалить можете оба файла, но при обновлении они снова появятся. Ридми никакого практического значения не несет в себе, в нем просто указана ваша версия WordPress. Если она последняя, то толку хакерам от этого будет мало. На всякий случай удалить, конечно, можно оба файла, но напрямую через них взломать сайт, естественно, невозможно.

      2. Переместить тоже можно, как вариант.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.