Безопасность WordPress как процесс

В прошлом году 83% заражений веб-сайтов, работающих на CMS, пришлось на WordPress. Можно легко сделать многое, чтобы обезопасить себя. Но для этого потребуется больше, чем просто установить плагин или удалить пару строк исходного кода.

Будет ли WordPress небезопасным?

WordPress принадлежит наибольшая доля рынка — 30% самых популярных веб-сайтов используют этот движок. Такой успех делает его ещё более привлекательной мишенью для хакеров.

Уязвимости в ядре WordPress стали причиной менее 10% всех взломов. Большинство из них связаны с устаревшими версиями платформы. Число взломов, осуществленных через бреши в новейших версиях CMS, составляет малый процент от общего числа.

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

Кто вас атакует и почему?

Большинство взломов WordPress -сайтов осуществляется автоматом ботом, или ботнетом. Боты – это специализированные компьютерные программы, которые постоянно ищут веб-сайты для взлома. Они просто находят уязвимость в защите. Ботнет объединяет вычислительную мощь многих ботов для решения больших задач.

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

Отправка спама

Спам составляет около 60% от всей электронной корреспонденции, и его необходимо откуда-то отправлять. Хакеры хотят приобрести доступ к серверу при помощи уязвимого плагина или старой версии ядра WordPress, чтобы превратить сервер в машину по рассылке спама.

Атаки иных веб-сайтов

Распределенные атаки типа «отказ в обслуживании» используют несколько компьютеров для перенаправления на сервер такого объема трафика, что он не может справиться с ним. Данные атаки трудно отразить. Хакеры, которые проникнут на сервер, могут добавить его в пул серверов, используемых для таких атак.

Кража ресурсов

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

Улучшение SEO

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

Кража данных

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

Почему безопасность так важна?

Чтобы запустить взломанный WordPress-сайт, необходимо удалить и заменить каждый бит стороннего кода(включая ядро ​​WordPress), проверить каждую строку кода. Заменить все пароли WordPress, пароли на сервере и пароли базы данных.

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

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

Также существует реальная функция юридических проблем. Особенно если у вас есть покупатели из ЕС, где летом 2018 года вступило в силу законодательство по регулированию защиты данных. Его положения подразумевают огромные штрафы за кражу данных, которые обрабатывались ненадлежащим образом.

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

Триада CIA

Триада CIA будет основой для каждого проекта цифровой безопасности. Это означает конфиденциальность, целостность и доступность. CIA- это набор правил, который ограничивает доступ сторонних посетителей к информации, обеспечивает достоверность и точность информации. А также гарантирует надежный доступ к данной информации.

Для WordPress структура CIA сводится к следующему.

Конфиденциальность

Посетители, вошедшие в систему,должны иметь соответствующие роли и их права доступа проверены. Убедитесь, что информация, предназначенная для администратора,недоступна иным. Этого можно достигнуть, повысив уровень защиты панели администрирования WordPress.

Целостность

Предоставляйте на точную информацию и убедитесь, что пользовательские взаимодействия на нем происходят корректно.

При принятии запросов как к front-end, так и к back-end проверяйте, соответствует ли намерение фактическому действию. При отправке данных проверяйте их на наличие вредоносного содержимого. Для удаления спама используйте специализированные плагины. К примеру, такие как Akismet.

Доступность

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

Часть 1: Целостность — не доверяйте ничему

Проверяйте намерение действий посетителей, а также целостность данных, которые вы обрабатываете.

Валидация и санация данных

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

//Переводим переменную в строку и проверяем ее.update_post_meta($post->ID, ‘some-meta’,sanitize_text_field((string)$_POST[‘some-meta’]));//Убеждаемся в том, что переменная - это абсолютное целое число.update_post_meta($post->ID, ‘some-int’,absint($_POST[‘int’]));

В приведенном выше примере мы добавили в запись WordPress две части данных, используя update_post_meta. Первая — это строка, так что мы передаем ее в PHP как string. Далее вырезаем ненужные символы и теги при помощи sanitize_text_field, одной из многих возможностей санации WordPress. Мы также добавили к данной записи целое число и использовали absint, чтобы убедиться, что это неотрицательное целое число.

Применение основных возможностей WordPress, таких как update_post_meta, будет более предпочтительной практикой, чем использование базы данных прямо. Это связано с тем, что WordPress проверяет все, что надо сохранить в базе данных на так называемые SQL-инъекции. Атака с использованием SQL-инъекций запускает вредоносный SQL-код через формы, размещенные на веб-сайте. Этот код управляет базой данных, выполняя, например, удаление всех строк, кражу данных посетителей или создание ложных учетных записей с правами администратора.

При работе с пользовательской таблицей или выполнении сложного запроса в WordPress, используйте во всех запросах класс WPDB и возможность prepare, чтобы предотвратить атаки при помощи SQL-инъекций:

$tableName=$wpdb->prefix. “my_table”;$sql=$wpdb->prepare( “SELECT*FROM%s”,$tableName);$results=$wpdb->get_results($sql);

$wpdb->prepare проверяет каждую переменную, чтобы убедиться в отсутствии опасности SQL-инъекций.

Экранирование

Экранирование данных перед сохранением важно. Но вы не можете быть на 100% уверены, что они по-прежнему безопасны. WordPress использует несколько фильтров, чтобы плагины и темы могли изменять данные «на лету». Так что есть большая вероятность,что данные будут скопированы при помощи иных плагинов. Экранирование данных перед их добавлением в тему или плагин — разумное решение.

Экранирование предназначено для предотвращения атак с использованием межсайтового скриптинга(XSS). XSS-атаки внедряют вредоносный код во front-end веб-сайта.

WordPress содержит несколько возможностей экранирования. Вот простой пример:

<a href=“<?php echo esc_url($url);?>”title=“<?php echo esc_attr($title);?>”><?phpechoesc_html($title);?></a>

Обеспечение безопасности запросов

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

WordPress проверяет намерения при помощи nonce. Nonce(или «число, используемое только один раз») не будет точным описанием этого API WordPress. Это не просто числа, они больше похожи на токен подмены межсайтовых запросов(CSRF), который можно легко найти в любом современном фреймворке. Данные токены предотвращают функция копирования запросов.

Nonce отправляется вместе с каждым уязвимым запросом, который выполняет посетитель. Они привязаны к URL-адресам и формам, и их необходимо проверять на принимающей стороне перед выполнением запроса. Вы можете добавить nonce к форме или URL-адресу. Вот пример, используемый в форме:

<form method= “post”><!-- Add a nonce field: --><?phpwp_nonce_field( ‘post_custom_form’);?><!-- other fields: →...</form>

В этом случае мы используем вспомогательную возможность wp_nonce_field(). Она генерирует два скрытых поля ввода, которые будут выглядеть следующим образом:

<input type="hidden" id="_wpnonce" name="_wpnonce" value="e558d2674e"/><input type="hidden" name="_wp_http_referer" value="/wp-admin/post.php?post=2&action=edit"/>

Первое поле ввода проверяет намерение, используя сгенерированный код при помощи строки «post_custom_form», которую мы передали возможности. Второе поле ввода добавляет реферер для проверки того, был ли запрос выполнен из системы WordPress.

Прежде чем обрабатывать задачу на ином конце формы или URL-адреса, надо проверить значение nonce, а также его валидность при помощи wp_verify_nonce:

if(wp_verify_nonce($_REQUEST[‘_wpnonce’], ‘post_custom_form’)==false){wp_die( “Nonce isn’t valid”);}

Здесь мы сверяем nonce с именем действия. Ели оно не соответствует, прекращаем обработку формы.

Сторонний код

Большинство взломов WordPress связано с плагинами, темами и устаревшими версиями WordPress. Меньшее число кода означает меньше функций для взлома.

Если уверены, что вам нужен какой-то плагин или тема, тогда внимательно изучите его. Посмотрите рейтинги, дату последнего обновления и требуемую версию PHP. Также поищите упоминания об этом плагине или теме в авторитетных блогах, посвященных безопасности, таких как Sucuri или WordFence. Другой вариант — просканируйте исходный программный код и убедитесь в том, что он поддерживает корректные nonce, санацию и экранирование. Чаще всего это будет признаком отлично написанного и безопасного кода.

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

  • esc_attr;
  • esc_html;
  • wp_nonce_field;
  • wp_nonce_url;
  • sanitize_text_field;
  • $wpdb->prepare.

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

Вы можете проверить зависимости Composer при помощи инструмента для интерфейса командной строки(CLI) от SensioLabs. Такие сервисы, как Snyk, могут проверить каждую зависимость в проекте.

Часть 2: Доступность: Keep It Simple

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

Обновление

Большинство атак на WordPress-сайты происходит через устаревшие версии CMS или плагинов.

Обновления безопасности для ядра WordPress сейчас происходит. Автоматически. Но обновления для системы безопасности в плагинах — это совсем другая история.

Все плагины должны быть протестированы до того, как будут установлены на веб-сайте. Такие инструменты, как WP CLI, упрощают обновление.

Посетители, роли и права

«Доступность» в триаде CIA связана с передачей информации «в нужные руки». Главный приоритет заключается в ограничении прав конечных посетителей. Не создавайте для каждого администратора отдельную учетную запись.

Учетная запись администратора в WordPress предлагает большие функции. В теме Vanilla даже можно без проблем настроить полную базу кода через учетную запись администратора.

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

Электронная почта

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

Для этого потребуется доступ к параметрам DNS доменного имени, чтобы добавить запись Framework Policy(SPF). Все качественные SMTP-сервисы предлагают точную запись, которую надо добавить. Запись SPF гарантирует, что SMTP-служба авторизована доменом для отправки электронной почты от имени.

Мониторинг

Мониторинг времени безотказной работы — это отличная практика. Такие инструменты, как Uptime Robot, усиливают безопасность.

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

Кроме этого инструмент проверяет целостность ядра ​​WordPress. А также предлагает подсказки в том случае, если есть нарушение.

Резервное копирование

Большинство качественных веб-хостингов делают это за вас. Но есть и иные варианты, если веб-хостинг не осуществляет автоматическое резервное копирование: VaultPress, а также BackupBuddy с резервным копированием в Dropbox или Amazon S3.

Веб-хостинг

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

Безопасность WordPress как процесс Почти 60% WordPress-сайтов работают на PHP 5.6 и 7.0, для которых исправления безопасности будут доступны только до конца этого года.

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

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

Часть 3: Конфиденциальность

Люди — это самая большая проблема в кибербезопасности.

Конфиденциальные данные

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

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

Кроме этого дважды проверьте, что вы поместили файл wp-config.php в .gitignore.

Не разрабатывайте программный код в одиночку

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

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

Логины и пароли

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

Доверяй, но проверяй

До сих пор мы вообще не говорили о социальной инженерии. Это форма взлома, которая набирает обороты. Обычно она не используется для взлома WordPress-сайтов. Но лучшая защита от социальной инженерии — «Доверяй, но проверяй».

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

Заключение

Ядро WordPress постоянно обновляется и исправляется. Но среда, окружающая WordPress, будет небезопасной.

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

Добавить комментарий

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