В этой статье описаны самые распространённые проблемы безопасности WordPress и способы их решения, включая советы, как избежать взлома.

Безопасность WordPress является важной темой с тех пор, как эта система управления содержимым (Content Management System или сокращённо — CMS) была выпущена в 2003 году. Как и любое популярное программное обеспечение с длинной и богатой историей, CMS WordPress также может стать целью хакеров. Вредоносные действия могут включать межсайтовые скриптовые атаки, sql-инъекции, брутфорс атаки и ряд прочих способов получения несанкционированного доступа.

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

Содержание

  1. Двухфакторная аутентификация
  2. Ограничение количества попыток входа в систему



Включите правильные разрешения на сервере для wp-config.php и .htaccess


Меняем:

644 -rw-r–r– /home/user/wp-config.php

644 -rw-r–r– /home/user/cgi-bin/.htaccess

на защищённые разрешения:

600 -rw——- /home/user/wp-config.php

600 -rw—— /home/user/cgi-bin/.htaccess

Используйте актуальную и безопасную версию PHP


По состоянию на 6 мая 2022 года самой последней и рекомендуемой версией WordPress является 8.0. Всегда можно проверить поддерживаемые и безопасные версии PHP, перейдя по этой ссылке. Как и в случае с любым другим программным обеспечением, поддержание всего ПО в актуальном состоянии является важным фактором безопасности WP.

Отключите редактирование тем и плагинов на уровне панели администратора WordPress


Если хакеры получат доступ к учётной записи администратора, то им будет очень легко внедрить вредоносный код в ваши темы и плагины WordPress. Мы будем использовать DISALLOW_FILE_EDIT, чтобы запретить редактирование файлов и повысить безопасность сайта.

Рассмотрим ниже, как это сделать:

  1. Для начала откроем файл wp-config.php с помощью любого текстового редактора.
  2. Внутри этого файла найдите строку /* That’s all, stop editing! Happy blogging. */ (На этом всё, можете прекратить редактирование! Удачи в ведении блога) и вставьте над ней следующий код: define( 'DISALLOW_FILE_EDIT,' true );
  3. Сохраните изменения и закройте файл.
  4. Если вы все сделали правильно, то ссылки «Plugins > Editor» и «Appearance > Editor» больше не должны быть видны в панели управления.



Постоянно обновляйте свои плагины WordPress


Также хорошей идеей будет следить за тематическими блогами и группами поклонников WP в социальных сетях. Многие пользователи WordPress делятся уведомлениями о критических ошибках в определённых плагинах WordPress. Если вы увидели ошибку, касающуюся плагина, который вы используете на своём сайте WordPress, немедленно выполните обновление. Кроме того, не забудьте удалить неиспользуемые плагины, чтобы избежать ненужных уязвимостей в вашей системе безопасности.

Устанавливайте темы и плагины WordPress только из надёжных источников


Самый безопасный способ — использовать официальную базу данных/репозиторий.

Темы WordPress можно найти здесь,


а доверенные плагины — здесь.


Файлы в этом хранилище были проверены и, очевидно, перед публикацией подвергались сканированию на наличие вредоносных программ.

Измените wp_prefix в базе данных во время установки WordPress


По умолчанию установка WordPress происходит с префиксом wp_, но в процессе стоит изменить его на собственный. Тем самым мы усложним вредоносным программам доступ к нашей базе данных и возможность извлечь данные.


Не используйте стандартный логин «Admin». Используйте надёжные пароли


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

Отключите функцию регистрации пользователей, если она вам не нужна


Для этого:

  1. Перейдите на страницу Настройки (Settings), раздел Общие (General).
  2. Снимите флажок в поле «Любой может зарегистрироваться» (Anyone can register) в разделе Членство (Membership).
  3. Сохраните изменения.



Отключите комментарии, если они вам не нужны


Есть несколько способов сделать это. Вы можете использовать свой код, встроенные опции WordPress или плагин.

Чтобы отключить комментарии глобально с помощью самого WordPress, выполните следующие действия:

  1. Перейдите в Настройки (Settings), раздел Обсуждение (Discussion)


  2. Снимите галочку в поле «Разрешить людям оставлять комментарии к новым статьям» (Allow people to post comments on new articles).


  3. Сохраните изменения.

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

Настройка robots.txt для блокирования несанкционированного доступа к файлам WordPress


Данный файл, размещённый в главной папке домена, служит указателем для краулеров Google (агентов пользователей), показывающим, какие страницы они должны посещать и индексировать, а какие — нет. Вы можете использовать пример, представленный в сером поле здесь (не забыв изменить http://www.example.com/ на ваш собственный домен).

Вы также можете взглянуть на официальное руководство Google по robots.txt.


Защитите себя от подбора учётных записей пользователей


Подбор учётных записей пользователей — это форма вредоносной активности, которая позволяет хакерам использовать брутфорс атаки для получения доступа к учётным записям пользователей. Обратите внимание на обсуждение на StackExchange о том, как можно снизить риск подобных атак.

Безопасный доступ к wp-admin / wp-login.php, двухфакторная аутентификация, ограниченное количество попыток входа в систему


Эти меры могут быть реализованы различными способами. Наиболее популярным является ограничение доступа для определённых IP-адресов или отображение дополнительного окна с информацией об аутентификации. Мы также можем установить ограничение на количество попыток входа или вообще использовать двухфакторную аутентификацию.

Двухфакторная аутентификация


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


После установки перейдите на страницу профиля и отметьте поле «Активен» (Active) в настройках Google Authenticator.


Теперь самое время установить приложение Google Authenticator для Android


или iOS.


После запуска аутентификатора должен появиться запрос на ввод кода или сканирование QR-кода. Вернитесь в настройки плагина и либо скопируйте код в приложение, либо выберите «Показать/скрыть QR-код» (Show/Hide QR code) и отсканируйте его телефоном.


Начнётся автоматическая настройка, вам необходимо принять все изменения и затем нажать «Обновить профиль» (Update profile) на подстранице «Ваш профиль» (Your profile). С этого момента каждая попытка входа в систему будет требовать двухфакторной аутентификации на странице входа в WordPress.

Ограничение количества попыток входа в систему


Как ранее уже упоминалось, ещё одним методом предотвращения атак брутфорсом является ограничение количества попыток входа пользователя в систему. Как это сделать?

Наверное, самое простое решение — это использовать один из многочисленных плагинов безопасности WordPress, например, WP Limit Login Attempts от Arshid. Вы можете скачать его здесь.


Регулярно делайте резервные копии


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


Скрывайте информацию об используемых вами версиях WordPress


Информация о вашей версии WP может быть полезна хакерам, поэтому нет необходимости делиться ею свободно. Во-первых, заблокируйте доступ к файлу readme, добавив следующие строки кода в файл .htaccess:

<files readme.html>    
    order allow,deny
    deny from all    
    </files>

Во-вторых, вы можете использовать плагин безопасности для деактивации этой информации. Одним из таких плагинов является Sucuri, который после активации будет автоматически скрывать эту информацию, но для уверенности вы можете проверить это, зайдя в «Настройки» (Settings) > вкладка «Усиление» (Hardening).


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

function wpbeginner_remove_version() {
return '';
}
add_filter('the_generator', 'wpbeginner_remove_version');

В-третьих, вы можете удалить информацию о версии WP в CSS/JS файлах, загружаемых на сайт. Вот ссылка на то, как это сделать, следуя рекомендациям пользователя tjhole.

Блокируйте выполнение PHP-скриптов в тех WP каталогах, где это не требуется


Запретите выполнение файлов PHP в не предназначенных для этого каталогах, чтобы повысить безопасность вашей платформы. Следуя решениям на сайте wpbeginner, откройте текстовый редактор и введите следующий код:

<Files *.php> deny from all </Files>

Сохраните этот текстовый файл как .htaccess и загрузите его в папку /wp-content/uploads/ на вашем сайте.

Отключите доступ к REST API вашего WordPress


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


Ограничьте или отключите доступ к XML-RPC


Если вы не используете XML-RPC, вы также можете отключить его с помощью:

function remove_xmlrpc_pingback_ping( $methods ) { unset($methods['pingback.ping']); unset($headers['X-Pingback']); return $methods; } add_filter('xmlrpc_enabled', '__return_false'); add_filter('xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );

или с помощью .htaccess:

<Files xmlrpc.php> Order deny,allow Deny from all </Files>

Посмотрите эту ссылку, если вам нужна дополнительная информация.

Убедитесь, что ваш сайт имеет SSL-сертификат


Теоретически можно использовать плагин, но мы рекомендуем действовать вручную, как предложено на этом сайте (прим. переводчика: статья на англ.языке). Ознакомьтесь с разделом «How to properly enable SSL in WordPress / Как правильно включить SSL в WordPress» и следуйте инструкциям.

Заключение


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


НЛО прилетело и оставило здесь промокод для читателей нашего блога:

15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

Комментарии (7)


  1. Smashrock
    06.05.2022 19:53
    +2

    Ребята, оригинал статьи - банальщина, которая из каждого утюга по Wordpress звучит. Особый фейспалм от последнего совета про SSL сертификат - спасибо, капитан Очевидность.

    Нет информации о релокейте wp-config.php , нет инфы о харденинге БД и PHP бека (использовании Snuffleupagus и просто редактировании конфигов, ибо создатели PHP не думают о секьюрности по умолчанию), о релокейте панели логина с /wp-login на что-то другое, о ханейпотах (логин-панель перекидываем на другой URL, но оставляем живой пустой URL /wp-login. Любого клиента, кто будет стучаться на /wp-login , можно банить на Х дней тем же Fail2Ban, потому что он точно бот), об интеграции с Crowdsec , который отлично дополняет WAF.

    Таких примочек в Wordpress много и статья была бы огонь, если бы была про такие штуки, а не банальщину.


    1. AlexG37G
      06.05.2022 20:51

      Буду очень благодарен если накидаете ссылок на статьи по безопасности ВП для нуба. А если соорудите статью по полной, нуу - в монитор поцелую такую статью)).


      1. Smashrock
        06.05.2022 21:51
        +1

        Да я сам продакт, просто в своё время заколебался с этим всем))

        Если по пунктам (пример Ubuntu и стека LEMP), то нужно каждое решение в стеке LEMP + Wordpress захарденить, а именно:

        L:
        1. Нужно захарденить саму ОС (тут помогут CIS Benchmarks и моя любимая утилита Lynis). Конечно же настраиваем Firewall и харденим SSH . Для SSH можно ещё заобфускейтить хендшейк - тыц - как приятное последствие - злоумышленникам придётся ещё и догадаться до magic word, которое может быть вполне рандомным паролем 64 символа (удачи им)
        2. Устанавливаем и настраиваем Crowdsec и баунсерами к nginx и файерволу.
        3. Можно скриптами захарденить систему. Например тык и тык

        E:
        1. Применяем systemd service hardening для Nginx (вот статья, чтобы по максимуму засендбоксить - Nginx вообще сможет работать без рут.)
        2. Решаем, будем ли использовать WAF на веб-сервере типа modsecurity, либо плагины в самом Wordpress (последнее предпочтительнее). Особенно отпетые параноики установят VPS и вставят туда Snort в режиме IPS с проксированием трафика на VPS c веб-сервером, а на веб-сервер зафигачат туда NAXSI
        3. Можно ещё использовать вот такую сборочку Nginx в контейнере
        4. Использовать какой-нибудь генератор конфиг файлов типа DO
        5. Настроить баунсер Crowdsec для nginx

        M:
        1. При установке использовать sudo mysql_secure_installation
        2. Прошерстить гайды типа такого

        P:
        1. Чёртов PHP - используй Snuffleupagus и усиленно кури его гайды, ибо можно накосячить
        2. Спросить у более опытных людей, что ещё можно сделать с PHP

        Wordpress:
        Дежурное правило - чем меньше плагинов, тем секьюрнее; чем меньше тем установлено, тем лучше. Но, блин, устанавливать всё равно нужно плагины для секьюрити.

        Тут я уже устал писать, но нужно:
        1. Используй WP Security Ninja и устрани все траблы. Я его потом сносил, ибо дежурное правило.
        2. Установи WAF плагин
        3. Безопасно храни пароли с помощью Argon2id - можно с помощью плагина , но дежурное правило
        4. На куки нужно установить Cookie Flags and Prefixes
        5. Взять сканеры Mozilla Observatory и Hardenize и добиться там высоких оценок
        6. Вбить в гугл wordpress online security scanner и проверить всеми найденными сканерами. Вообще, самое эффективное решение - взять Burp Security suite , но это дорого и профессионально
        7. Куча всего другого, .что я уже не помню


        1. AlexG37G
          07.05.2022 09:16
          +1

          Ой, ух, ах... Мой нуб мозг уже заскрипел от "захарденить" и "баунсер")).

          А всего-то в задумках статейник на Вордпрессе.

          С П А С И Б О!


          1. FanatPHP
            07.05.2022 09:47

            Для статейника всё гораздо проще: постоянно обновлять свой вордпресс и никаких плагинов.


            1. symbix
              07.05.2022 14:35
              +1

              Для статейников вообще есть генераторы статики типа wp2static.


  1. BiOM
    08.05.2022 20:50

    Вздрогнул и полез проверять, когда прочитал "По состоянию на 6 мая 2022 года самой последней и рекомендуемой версией WordPress является 8.0."

    Можно выдохнуть, свежая версия на текущий момент 5.9.3