Главная / Блог / Обзоры / Подробный анализ WordPress и WooCommerce с точки зрения безопастности

Подробный анализ WordPress и WooCommerce с точки зрения безопастности

06 апреля 18
Reading Time: 8 minutes
1 комментарий
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes)

 

В рамках комплексного анализа и исследования основных вопросов к WordPress и Woocommerce, мы не могли обойти стороной вопросы безопасности.

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

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

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

Для начала немного статистики

В статье WP White Security  была приведена статистика взломанных сайтов:

  • 41% были взломаны через уязвимость хостинг-аккаунта
  • 29% были взломаны через проблемы безопасности в теме WordPress, которую они использовали
  • 22% были взломаны через проблемы безопасности в плагинах WordPress, которые они использовали
  • 8% были взломаны через слабый пароль

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

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

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

Ниже мы предоставим самые распространенные рекомендации, которые на данный момент можно встретить в интернете.

Рекомендации для улучшения безопасности WordPress

Обновляйте WordPress

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

Выбирайте надежный хостинг

41% взломов произошли из-за проблемы безопасности на хостинговых платформах, поэтому выбор качественной хостинговой компании имеет важное значение. Критерии:

  • Поддержка последних версий PHP и MySQL
  • Оптимизация для WordPress
  • Сканирование на наличие вредоносных программ и нежелательных файлов

Также не забывайте делать резервную копию базы данных и файлов.

Важные настройки при установке

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

Изменить префиксы к таблицам баз данных. Это поможет снизить уязвимость к SQL-инъекциям. Вы найдете префикс к названиям таблиц в файле wp-config.php:

$table_prefix = ‘wp_’;

Плагины и темы WordPress

Через дыры в безопасности в коде плагинов и тем злоумышленники получают доступ к сайтам в более чем 50% случаев. Поэтому очень важно взвесить все «за» и «против», перед тем как воспользоваться тем или иным плагином/темой.

Использование корректных прав доступа к файлам/директориям

Это еще один из важных моментов в улучшении безопасности. Установка прав доступа к директории 777 (разрешена запись всем) дает возможность злоумышленникам загружать в эту директорию разнообразные файлы или изменять те, что там есть. Рекомендуется установить следующие права (обычно это можно сделать через хостинг-панель или FTP-клиент):

  • Все папки должны иметь права 755 или 750
  • Все файлы — 644 или 600
  • Для wp-config.php установите 600

Отключить сообщения об ошибках скриптов

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

error_reporting(0);

@ini_set(‘display_errors’, 0);

Защита через файл .htaccess

Внимание — данная рекомендация является очень распространенной, но на данный момент нами не проверена на практике. Мы все проверим и опишем более подробно в следующих статьях. Используйте на свое усмотрение. Будем очень признательны, если вы поделитесь с нами своими мыслями в комментариях или через контакты.

Заметьте, что приведенные коды должны быть размещены в файле вне тегов # BEGIN WordPress и # END WordPress, поскольку все, что между этими тегами, меняет WordPress

Файл wp-config.php очень важный, его можно защитить от внешнего доступа, добавив следующие строки в .htaccess:

<files wp-config.php>

order allow,deny

deny from all

</files>

Директория /wp-includes/ содержит много важных файлов из дистрибутива WordPress, без которых WP не будет работать. Для ее защиты можно добавить следующие строки в .htaccess, который в корне сайта:

RewriteEngine On

RewriteBase /

RewriteRule ^wp-admin/includes/ — [F,L]

RewriteRule !^wp-includes/ — [S=3]

RewriteRule ^wp-includes/[^/]+.php$ — [F,L]

RewriteRule ^wp-includes/js/tinymce/langs/.+.php — [F,L]

RewriteRule ^wp-includes/theme-compat/ — [F,L]

или использовать следующее правило, которое будет перенаправлять любые прямые запросы к файлам PHP на выбранную вами страницу (в следующем примере сервер вернет 404 страницей и кодом состояния).

# Restrict access to PHP files from plugin and theme directories

RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php

RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/

RewriteRule wp-content/plugins/(.*\.php)$ — [R=404,L]

RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php

RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/

RewriteRule wp-content/themes/(.*\.php)$ — [R=404,L]

Или запретить людям просматривать содержимое директорий на сайте через браузер. Добавьте следующий код в тот же .htaccess:

Options All -Indexes

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

<Files .htaccess>

order allow,deny

deny from all

</Files>

Защитите Debug Logs

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

WordPress использует константу WP_DEBUG, которая определена в wp-config.php. Константа используется для запуска режима отладки в WordPress. По умолчанию константа установлена как false.

Разработчики и администраторы также могут включить константы компаратора WP_DEBUG_LOG и WP_DEBUG_DISPLAY в WP_DEBUG. WP_DEBUG_LOG создает файл журнала в папке wp-contents, а WP_DEBUG_DISPLAY контролирует, отображаются ли настройки в HTML-страницах.

Любое из вышеперечисленного будет полезным при разработке темы, плагина или сайта. Но если это разрешено на готовом веб-сайте, это может привести к раскрытию информации. Это позволит злоумышленникам просматривать ошибки и дополнительную информацию о регистрации. Константу WP_DEBUG нужно удалить из файла wp-config.php или установить ее как false, как показано ниже:

define (‘WP_DEBUG’, false);

Принудительное использование SSL

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

Прежде всего узнаем, есть ли возможность у вашего провайдера использовать SSL. Если да, то открываем файл wp-config.php и добавляем следующую строку:

define (‘FORCE_SSL_ADMIN’, true);

Удалите Readme и другие ненужные файлы

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

Рекомендации по защите от Brute Force

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

Согласно таблице в Википедии, чтобы подобрать пароль на 8 символов, содержащий цифры и буквы, нужно потратить 9 месяцев, при скорости перебора 100К попыток в секунду.

https://en.wikipedia.org/wiki/Brute-force_attack

Но все же можно воспользоваться следующими методами.

Ограничьте количество попыток авторизации

Хакеры используют brute force атаки для подбора паролей, каждый раз пытаясь авторизоваться с новым паролем. Один из лучших способов защитить свой сайт от такого рода атак — установить плагин, например Login LockDown или Login Security Solution. Эти плагины ограничивают количество попыток авторизации на сайте.

Авторизация в два этапа

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

Дополнительные рекомендации для усиленной защиты

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

Будем очень признательны, если вы поделитесь с нами своими мыслями о них в комментариях или через контакты.

Предотвращение выполнения сторонних PHP-файлов

Поскольку сайты WordPress должны позволять своим пользователям загружать новый контент, каталог загрузки WordPress должен быть доступным для записи. В таком случае ваш каталог wp-content/uploads следует рассмотреть как потенциальную точку взлома.

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

Лучший подход к устранению этого потенциального риска для безопасности — отказать веб-серверу в выполнении любых файлов PHP в каталоге wp-content/uploads, используя следующее правило.

<Directory «/var/www/wp-content/uploads/»>

<Files «*.php»>

Order Deny,Allow

Deny from All

</Files>

</Directory>

Деактивация XML-RPC

Начиная с версии WordPRess 3.5, XML-RPC активно по умолчанию. Эта возможность позволяет удаленно подключаться через различные блог-клиенты вашего сайта. Также она используется для трекбеков и пингбэков. К сожалению, злоумышленники часто используют эту возможность для атак на сайты.

Чтобы отключить эту возможность, можно использовать такой плагин как Disable XML-RPC Pingback и уменьшить риск того, что ваш сайт будет атакован.

Защищаем WordPress от XSS-инъекций

Программисты всегда стараются защитить GET и POST-запросы, но иногда этого недостаточно. Необходимо защитить блог от XSS-инъекций и попыток модификации переменных GLOBALS и _REQUEST.

Этот код блокирует использование XSS-инъекций и попытки модифицировать переменные GLOBALS и _REQUEST. Вставьте код в ваш файл .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]

Скрываем версию WordPress

WordPress автоматически вставляет номер своей версии в исходный код страниц. К сожалению, не всегда удается вовремя обновлять движок. А это означает, что, зная какая у вас версия WordPress со всеми ее недостатками и слабыми местами, злоумышленник может очень вас расстроить. Чтобы скрыть версию WordPress, открываем functions.php, лежащий в папке с активной темой нашего блога (wp-content / themes / название-вашей-темы /) и добавляем туда этот код:

remove_action (‘wp_head’, ‘wp_generator’);

или

// remove version info from head and feeds

function complete_version_removal() {

return »;

}

add_filter(‘the_generator’, ‘complete_version_removal’);

Пишем плагин для защиты от зловредных URL-запросов

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

Создаем новый файл под названием blockbadqueries.php и помещаем его в папку wp-content / plugins. Потом просто активируйте его в админке, как любой другой плагин.

<?php

/*

Plugin Name: Block Bad Queries

Plugin URI: perishablepress.com/press/2009/12/22/protect-wordpress-against-malicious-url-requests

Description: Protect WordPress Against Malicious URL Requests

Author URI: perishablepress.com

Author: Perishable Press

Version: 1.0

*/

global $user_ID;

 

if($user_ID) {

if(!current_user_can(‘level_10’)) {

if (strlen($_SERVER[‘REQUEST_URI’]) > 255 ||

strpos($_SERVER[‘REQUEST_URI’], «eval(«) ||

strpos($_SERVER[‘REQUEST_URI’], «CONCAT») ||

strpos($_SERVER[‘REQUEST_URI’], «UNION+SELECT») ||

strpos($_SERVER[‘REQUEST_URI’], «base64»)) {

@header(«HTTP/1.1 414 Request-URI Too Long»);

@header(«Status: 414 Request-URI Too Long»);

@header(«Connection: Close»);

@exit;

}

}

}

?>

Как это работает? Работа этого плагина проста — он проверяет все длинные запросы (более 255 символов) и наличие php-функций eval или base64 в URI. Если что-то из этого находится, браузеру пользователя возвращает страницу с ошибкой 414.

Плагины для укрепления безопасности WordPress

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

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

Wordfence

Когда заходит речь о плагинах безопасности на WordPress, в первую очередь в голову приходит Wordfence. Плагин набрал целых 4,9 звезд из 5, так что если вы теряетесь в выборе, плагин с таким впечатляющим результатом заслуживает на внимание. Он завоевал признание пользователей благодаря множеству функций:

  • расширенная проверка безопасности;
  • блокировка пользователей по IP;
  • безопасный вход в систему;
  • совместимость с IPv6;
  • полная поддержка сайтов WooCommerce;
  • поиск вредоносного кода;
  • оценка уязвимости;
  • FireWall;
  • единая панель управления администратора для нескольких блогов.

All In One WP Security & Firewall

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

Основные возможности плагина:

  • безопасность аккаунтов пользователей
  • безопасность авторизации пользователей
  • безопасность регистрации пользователей
  • безопасность базы данных
  • безопасность файловой системы
  • резервное копирование и восстановление файлов HTACCESS и WP-CONFIG.PHP
  • черный список пользователей
  • FireWall
  • предотвращения brute force атаки
  • сканирование файлов на изменения
  • защита от спама в комментариях
  • дополнительные возможности

 

SUCURI Security

SUCURI — еще один сервис с хорошей репутацией в обеспечении защиты сайтов. Плагин для безопасности WordPress от SUCURI отлично справляется с проверкой целостности файлов, усилением безопасности, аудитом действий, поиском вредоносного кода и многим другим.

  • защита от DDoS-атак;
  • оценка уязвимости;
  • оптимизация скорости;
  • защита от брутфорса;
  • оповещения безопасности;
  • восстановление после взлома;
  • поиск вредоносного кода.

Выводы

WordPress — это самая популярная в мире CMS-система, которую используют сотни миллионов сайтов. В связи с широкой пользовательской базой она является потенциальной целью для хакеров.

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

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

Еще статьи из нашего всестороннего анализа ключевых моментов WordPress и WooCommerce:

WordPress Development Environment and Developers’ Best Practices Review

Review and Analysis of Top 10 Premium WooCommerce Themes 2017

Complete WooCommerce SEO Guide and Tips

Comments (1)
  • Геннадий:

    Интересно. Спасибо. Дополнительно админку можно защитить при помощи .htpasswd

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

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

Более 3000 запущенных проектов

Вместе с нами многие уже развивают свой бизнес! Смотреть все отзывы
Хочу выразить большую благодарность коллективу компании "ImageCMS" а именно Ивану и Марии! Во время выбора компании проводил переговоры с 7 различными организациями, Иван единственный кто смог адекватно объяснить и подсказать всю необходимую информацию для принятия решения. В итоге результат более чем на 100% соответствует ожиданиям, а во много их даже превосходит!
Перепробовав много CMS (opencart, Битрикс) и др. Мы увидим, как много в каждой из них недостатков. Где-то или очень сложно или очень дорого кастомизировать. Работая маркетологом, могу заверить, что в ImageCMS большинство нужны "фич" реализовано из коробки, без дополнительных надстроек. Посмотрев демо версию новой версии движка, был приятно удивлен скоростью работы (ооочень важно).
За время сотрудничества компания показала себя в качестве ответственного подрядчика, быстро воплотив в жизнь удобный интернет-магазин с учетом всех наших пожеланий.
Работой доволен. Отвечают всегда быстро и по сути, остаются только приятные впечатления от общения. Пара слов о новом движке: Быстро, красиво и интуитивно понятно. Полностью оправдывает вложенные средства. Рекомендую.
Доволен. Скрипт считаю перспективным. Считаю, что ваш коллектив работает на опережение: ваше предложение было оптимальным по цене/качеству.
Опертивная и четкая работа, своевременое предоставление дополнительных консультаций по работе с административной частью. Созданным магазином довольна. Рекомендую этот движок!