Защита WordPress от злоумышленников

Приветствую Вас, уважаемые посетители и подписчики блога 4remind.ru. В этой заметке речь пойдет об элементарной, но обязательной для применения вещи, такой как защита блога WordPress, да и любого другого сайта, от злоумышленников, другими словами об усилении безопасности веб-ресурсов. К сожалению некоторые владельцы сайтов, особенно начинающие блогеры, уделяют защите и безопасности собственных веб-ресурсов мало должного внимания, и в результате нередко их детища взламывают или заражают вирусами. Итак, давайте рассмотрим некоторые способы усиления защиты WordPress и других ресурсов.
Защита и безопасность WordPress

Для улучшения безопасности блога или сайта на движке WordPress рекомендуется воспользоваться как минимум несколькими небольшими рекомендациями. Это конечно же не все возможные варианты для улучшения защиты сайтов, но тем не менее они на данный момент актуальны и очень эффективны. Итак, приступим к обзору рекомендаций для повышения безопасности WordPress.

Надежные пароли и логины

Старайтесь выбирать сложные пароли для логина на блог или сайт, особенно это касается пароля учетной записи администратора WordPress. Рекомендуется использовать в паролях комбинации буквенно-цифровых символов, знаки пунктуации и других не алфавитных знаков (например «собака» @, символ подчеркивания, различные скобки, знаки плюса, минуса и так далее). Длину пароля рекомендую использовать не менее 12-ти символов. Настоятельно рекомендуется изменить имя администратора блога, которое предлагается по умолчанию (как правило это «admin»), на какое-нибудь другое, более длинное, и лучше, если имя администратора (для логина) будет вообще из рандомного набора символов, например такое: dhw654d82ka7

Вывод ошибок при логине

Если пользователь при логине на сайт или блог ввел неверные данные (иногда админ или другой пользователь ошибается, а чаще это происходит, когда злоумышленники пытаются подобрать пароль с помощью скриптов — Brute-Force атаки), то WordPress выводит на страницу информацию об ошибке. Так вот, чтобы затруднить подбор пароля (чтобы сторонний скрипт не знал, прошел ли логин или нет), нужно отключить вывод информации об ошибочной попытке логина. Сделать это нетрудно, достаточно добавить в файл functions.php соответствующий фильтр:

add_filter( 'login_errors', create_function( '$a', "return null;" ));

Префикс таблиц базы данных

По умолчанию в файле конфигурации WordPress wp-config.php используется префикс для таблиц базы данных «wp_». Это никуда не годится, так как его знают абсолютно все, особенно скрипты злоумышленников. Поэтому для улучшения защиты WordPress при доступе к базе данных стоит префикс заменить на более сложный и по возможности уникальный, например на такой:

$table_prefix = 'dg994p71z_';

или

$table_prefix = 'wp_gp622azk_';

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

Уникальные ключи для аутентификации

В файле wp-config.php хранятся секретные ключи для аутентификаций пользователей, которые обязательно нужно заменить на свои при первой же установке WordPress. В дальнейшем рекомендую время от времени заменять их на другие. Вот список этих ключей, установленных по умолчанию:

define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

Фразы (сами ключи, по умолчанию их значение ‘put your unique phrase here’) старайтесь делать сложными, длинными и разными. А если Вы не уверены в том, что пропишите эти ключи правильно, то воспользуйтесь онлайн-генератором этих ключей: https://api.wordpress.org/secret-key/1.1/salt/

Запрет редактирования тем и плагинов

Чтобы защитить WordPress от изменения и редактирования тем и плагинов посторонними лицами, злоумышленниками, нужно просто запретить эти действия при помощи установки значения переменной DISALLOW_FILE_EDIT в значение «true» в файле конфигурации WordPress wp-config.php:

define( 'DISALLOW_FILE_EDIT', true );

Использование SSL соединений

Если у Вас используется соединение с блогом или сайтом через SSL (Secure Sockets Layers — криптографический протокол, устанавливающий безопасное соединение между клиентом и сервером), то злоумышленникам будет не под силу перехватывать или подменить информацию, данные, которые проходят через интернет во время работы с сайтом. Однако здесь не все так уж и гладко. Дело в том, что не все хостинги предоставляют возможность использовать SSL-протокол. Поэтому, для начала Вам придется уточнить у вашего хостинг-провайдера, позволяет ли он использовать SSL и на каких условиях. Кроме того, если у Вас есть возможность воспользоваться SSL, то придется еще приобрести и SSL сертификат (стоит он сейчас примерно от 20$ и выше, на год), и плюс к этому еще скорее всего понадобится использовать статический IP-адрес.

Для включения поддержки SSL-протокола в WordPress нужно в файле конфигурации wp-config.php добавить следующие строчки:

define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

После того, как Вы сохраните измененный файл, то сразу же логин и доступ в панель управления сайтом будет осуществляться с SSL шифрованием. Другими словами вход в панель управления WordPress (консоль) будет проходить через «https» вместо обычного «http».

Защита от автоматизированного копирования и хотлинкинга

Содержимое контента очень важно практически для любого сайта, особенно если сам контент уникален и интересен посетителям. Однако существует много таких «личностей», которые готовы пользоваться плагиатом и зачастую копировать содержимое практически один в один, то есть безо всяких изменений. Это относится как к текстам, так и к изображениям. Во многих случаях контент копируется полностью, со все содержимым, включая заголовки статей, при помощи ботов и скриптов. Полностью защититься от копирования думается просто невозможно, но кое-что все же сделать можно. Один из способов: откройте файл single.php из текущей темы вашего блога WordPress и найдите часть кода, который отвечает за вывод заголовка статьи. Во многих случаях это будет код типа , а затем измените его следующим способом:


Этот код сделает из заголовка прямую ссылку, ведущую на эту же статью. В результате статья, украденная целиком (как правило ботом или скриптом), вместе с заголовком, теперь будет содержать в себе прямую ссылку на страницу вашего блога.

Для защиты от хотлинкинга (подгрузки изображений с вашего сайта на сторонние ресурсы) проделать можно следующее:
1) создайте изображение-заглушку небольшого размера типа blockhotlink.jpg и разместите его в каталоге, где хранятся другие изображения вашего сайта; 2) добавьте следующий код в файл .htaccess:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?yoursite\.ru/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/blockhotlink.jpg [L]

Если понадобится, замените путь к файлу изображения-заглушки /images/blockhotlink.jpg на соответствующий файловой структуре вашего сайта. Теперь при попытке хотлинкинга любого изображения на стороннем ресурсе будет отображаться только изображение-заглушка blockhotlink.jpg.

Защита от скрипт-инъекций (script injections)

На данное время атаки скрипт-инъекциями очень сильно распространены, и злоумышленники при помощи них часто пытаются получить доступ, изменить или вообще уничтожить данные в базе SQL, MySQL. Для защиты блога или сайта от таких атак Вам нужно защитить GLOBALS и _REQUEST переменные PHP. Защиту можно включить используя файл .htaccess в корневом каталоге вашего веб-ресурса:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

При обнаружении атаки, при которой кто-то пытается изменить значения GLOBALS или _REQUEST переменных PHP, запрос будет заблокирован и выдана ошибка 403.
Будьте осторожны при редактировании файла .htaccess, так как любая опечатка в нем может привести к тому, что Ваш сайт может стать недоступным или будет редиректиться на другой URL. Не забывайте делать бэкапы перед любыми его изменениями.

Обновления WordPress

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

1) сделать полный бэкап файлов и базы данных блога или сайта;
2) убедиться, что все используемые на блоге плагины совместимы с новой версией WordPress;

По первому пункту думаю все понятно, а вот по второму… Если Вы обнаружили, что какой-то из плагинов не совместим или не уверены в его совместимости, то придется либо найти ему замену, либо доработать своими силами (или попросить сделать это кото-то, кто разбирается в коде). Для проверки совместимости в большинстве случаев оптимально использовать локальную (установленную на своем компьютере, например с использованием Denwer) копию блога.

И напоследок… Не ленитесь и делайте резервные копии блога или сайта как можно чаще, следите за появлением новых версий движка WordPress и новых версий плагинов, своевременно обновляйте их до новых стабильных версий. В таком случае ваш веб-ресурс будет меньше подвержен атакам злоумышленников, и Вы сможете быстро «реанимировать» ваш блог или сайт, если он был взломан или стал вести себя неподобающим образом.

Метки: WordPress, безопасность, защита

Поделитесь материалом с другими, воспользуйтесь этими кнопками:
Получать обновления и новые материалы блога по E-mail

25 комментариев к “Защита WordPress от злоумышленников”

  1. AndreyF:

    Владимир, у меня вот вопрос по ключам для аутентификации: а какой длины они должны быть, какая максимальная длина?

    • AndreyF, максимальная длина ключей (солей), насколько я помню, 64 символа. Такую длину ключей и рекомендуется использовать. Генерируйте их с помощью сервиса API WordPress, в статье в разделе ссылка есть на этот сервис (кстати, эта же ссылка есть в файлах wp-config.php и wp-config-sample.php).

  2. Алексей:

    Много узнал полезного у Вас на блоге. Спасибо!

  3. Александр:

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

  4. Refkaz:

    Ну и уязвимый вордпресс. думал наоборот, что Сообщение о неправильности пароля стопорит брутфорс, т.к. приходиться окошко закрыть… Пошел убирать эту функцию )

  5. Эллина:

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

  6. smarttv:

    Зимой пытались взломать пароли админа, переименовали wp-login.php Отстали.

  7. Елена:

    Воспользовалась всеми наставлениями. Теперь буду спокойна за свой сайт. Хотя вообще ВП редко кто ломает, больше на ДЛЕ все смотрят)

  8. Светлана:

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

  9. Arhimed:

    Все чаще задумываюсь о переходе на drupal — куда более защищенная CMS по всем параметрам

  10. Михаил:

    Да, когда сайт начинает иметь показатели, о безопасности стоит задуматься вдвойне.

  11. Тамара:

    Вот точно, о безопасности совсем не задумывалась… Даже мысли не возникало, кому может понадобится мой блог. Но теперь обязательно воспользуюсь всеми советами, ведь это не так сложно, а можно быть поспокойнее ) Спасибо!

  12. Наталья Самолюк:

    Как все сложно, вторая часть статьи. В первой части все понятно. У меня везде стоят сложные километровые пароли. Редирект на админку. От копирования роботами я использую сервис. Движок обновляю регулярно. А остальное…

    • От копирования контента полной защиты вообще не существует.
      Если браузер может отображать контент, то и роботы могут его так же свободно брать, и брать естественно не с экрана, а из исходного кода страниц. И даже если в исходниках что-то зашифровано, например base64, то опять же, браузер использует JavaScript для расшифровки, и точно такую же расшифровку спокойно смогут делать роботы.

  13. Виктор:

    Одно время тоже ставил защиту от копирования контента, но после жалоб со стороны посетителей, убрал. Посетителей надо любить, а от воровства действительно не защитишься.

    • Ната:

      А как же функции определения авторства в Гугле или формочка добавления уникального текста от Яндекс? Яндекс честно пишет, что ничего не гарантирует. Я использую оба способа — пока копий не находила …:)

  14. Василий о здоровье:

    Спасибо за кучу полезных рекомендаций по защите блога. Буду наверное потихоньку внедрять Ваши рекомендации. Ох как уязвим этот вордпресс.

  15. Ромка:

    Когда вставляю в функцию строчку:
    add_filter( ‘login_errors’, create_function( ‘$a’, “return null;” ));
    Она прописывается на всех страницах блога… нафиг, удалю…

    • Ромка,
      что у Вас прописывается на всех страницах блога?

      Глядя на ваш код, что Вы вставили в комментарий, возможно у вас неправильно скопировались кавычки (одиночные и двойные). И как следствие PHP возможно неверно их парсит.
      Просто замените все кавычки в этой функции вручную.

      Сверьте вот с этим кодом:

      add_filter('login_errors', create_function('$a', "return null;"));
      

  16. Анна К.:

    А что Вы думаете о плагине защиты Better WP Security?

    • Это неплохой плагин, но вот он что-то давненько не обновлялся. Последняя его версия вышла 2013-8-24 и похоже проверялась разработчиками лишь с WordPress 3.6.1, что для секьюрити продукта нехорошо, т.к. он должен всегда поддерживать самую последнюю версию WP и учитывать все важные изменения в ее коде.

      • Анна:

        Знаете, я тогда все-таки установила этот плагин защиты, многое настроила, но многие «защитные функции» побоялась активировать, уж больно их много.
        По большому счету в нем есть всё, что Вы описываете в своих статьях по защите, и это очень, очень удобно!
        Так вот — по-моему, разработчики прислушались к Вашим словам :) — обновления выходили уже несколько раз, вот и очередное обновление — по словам авторов — 100% совместимость с последним WordPress 3.9.
        Я, например, до сих пор юзаю Better WP Security 3.6.6 — в ней есть хоть минимальный перевод на русский.
        На другом же сайте постоянно обновляюсь — и уже версия 4.1.3. И каждый раз делаю это с опаской — внешний вид и расположение настроек изменились, перевода нет — понять назначение некоторых не могу, и вот сюрприз: Похоже, настройки при обновлении сбрасываются!
        Возможно не все, но измененный урл доступа к странице логина, например, не сработал, ну, а как сама же и настроила это не было понятно. Как в анекдоте — и так 8 раз! В результате меня за попытки войти в админку мой же сайт и забанил на полчаса. Были после выполнения обновления и еще кое-какие глюки…
        Хотя в целом: есть там много и приятных мелочей: например, функция закрытия доступа в админку в заданное время (например, с 23.50 до 10.00 утра), либо на время отпуска :), бекапы по расписанию, указание на разные уязвимости с возможностью их залатать.
        Ну и приятное глазу — можно видеть количество попыток и способов взломать сайт.
        Пока не буду отказываться от это плагина.

        • Анна:

          Добавлю к своему же: плагин недавно сменил название на iThemes Security, похоже, что глюки при обновлении и были из-за этого.

  17. Мультодром:

    Часто в логах были попытки подобрать пароль, поменял адрес админки и стало нормально :) На досуге проверю всё что описано в статье.

  18. Вячеслав:

    На самом деле, WP достаточно дырявая система. Имея инструментарий из Kali Linux можно ломануть многие сайты. Кроме того, часто веб-мастера пренебрегают обновлениями, что делает возможным использование различных эксплойтов

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

Уважаемые посетители, пожалуйста, пишите осмысленные и исчерпывающие комментарии. Короткие фразы типа «спасибо автору», «возьму на заметку», «мне помогло» и т.п. будут удаляться. Исключение, когда Вы отвечаете на чей-то вопрос или благодарите за помощь.

Ссылки на Ваш сайт получат статус DoFollow после третьего комментария.

Для вставки кода в комментарии можно использовать BB-коды:
[text] [/text], [php] [/php], [html] [/html]

Подписаться на обновления блога 4remind.ru по RSS
Новости блога в социальных сетях

4remind.ru - персональный блог вебмастера



Наверх
Наверх