Как Защитить Свой Сайт Или Блог Под Управлением CMS Wordpress От Взлома: Практические Советы.

Тема в разделе "Сайтостроение: общий форум", создана пользователем ROFI, 13 Октябрь 2017.

Реклама
  1. ROFI

    ROFI Профессионал

    Сообщения:
    101
    Симпатии:
    16
    Пол:
    Мужской
    Как Защитить Свой Сайт Или Блог Под Управлением CMS Wordpress От Взлома: Практические Советы.

    Как Защитить Свой Сайт Или Блог Под Управлением CMS Wordpress От Взлома: Практические Советы.


    После того как сайт или блог создан и запущен, перед каждым стоит задача защиты ресурса от вредоносных программ и хакерских взломов. Как правило, большинство владельцев популярной системы управления контентом (CMS) Wordpress устанавливают среднюю степень защиты и предполагают, что несколько установленных плагинов обеспечат высокий уровень защиты. В тоже время имеет место мнение о том, что “мой сайт или блог вряд ли может интересовать хакеров”, но именно на такие ресурсы хакеры ориентируются в первую очередь. Ведь взломав ваш абсолютно безобидный блог “ни о чем”, который по вашему мнению не должен привлекать злоумышленников, вы тем самым становитесь одним из многих распространителей вредоносного кода для его конечной цели. В данной статье рассмотрим методы защиты движка Wordpress.

    На сегодняшний день Wordpress является одним из самых популярных CMS в мире. Блоги, мини-сайты, а также целые порталы — строится, взяв за основу Wordpress. За лёгкостью освоения все же кроются вопросы, которые связанны с безопасностью сайта. Большое распространение CMS — все большее внимание со стороны злоумышленников.

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

    ОСНОВНЫЕ МЕТОДЫ ЗАЩИТЫ CMS WORDPRESS


    1. Защищаем Wordpress от XSS-инъекций.


    1.1. Если вы хоститесь на виртуальном кластерном хостинге дата-центра или на виртуальном сервере (VPS) в случае использования в качестве веб-сервера Apache, вставьте код в файл .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, тогда он попросту блокирует его и выдаёт пользователю ошибку 403.

    1.2. В случае с VPS и установленным NGINX как самостоятельным веб-сервером (+ php-fpm), в последних версиях разработчиком внедрена штатная защита NAXSI (NGINX ANTI XSS & SQL INJECTION).

    Файрвол веб-приложений (WAF) для NGINX, который помогает в защите от XSS, SQL-инъекций, CSRF, а также Local & Remote File Inclusions.

    Установка:

    Ubuntu, Debian, Netbsd, Freebsd: возможно в виде пакета.

    К примеру, в серверной Ubuntu 12.04 достаточно сделать

    Код:
    apt-get install nginx-naxsi
    Также и другие Linux-системы:

    Если пакеты еще не появились, тогда собираем nginx + naxsi из готовых исходников:


    Код:
    wget http://nginx.org/download/nginx-x.x.xx.tar.gz
    
    wget http://naxsi.googlecode.com/files/naxsi-x.xx.tar.gz
    
    tar xvzf nginx-x.x.xx.tar.gz
    
    tar xvzf naxsi-x.xx.tar.gz
    
    cd nginx-x.x.xx/ 
    (вместо x.x.x.x — необходимо поставить доступные актуальные версии)

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


    Код:
    include /etc/nginx/naxsi_core.rules;
    и уже после перезапустите конфигурацию (service nginx reload).

    Если при попытке зайти в админ панель CMS Wordpress вы ошибётесь с вводом логина или пароля, движок незамедлительно вам об этом сообщит. Зачем хакеру знать, что пароли, который он подбирает – неверены?

    2. Убираем показ лишней информации
    Следует открыть functions.php, который лежит в папке с активной темой

    блога (wp-content/themes/название-вашей-темы/) и, непосредственно,

    добавить следующий код:


    Код:
    add_filter('login_errors',create_function('$a', "return null;"));
    сохраняем файл. Теперь никаких сообщений.

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

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

    Прежде всего узнаём, есть ли возможность на вашем тарифном плане

    использовать SSL. Если да, то открываем файл wp-config.php (в корне

    сайта) и добавляем следующее:

    Код:
    define('FORCE_SSL_ADMIN', true);

    4. Используем .htaccess для защиты файла wp-config

    wp-config.php содержит абсолютно все данные, которые необходимы для

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

    доступ – одна из самых главных и сложных задач.

    В первую очередь необходимо находити файл .htaccess в корне нашего сайта, далее добавить следующие строки:

    Код:
    order allow,deny
    
    deny from all 
    5. Сокрытие версии Wordpress
    Движок автоматически вставляет номер текущей версии CMS в исходный

    код каждой страницы. Не всегда есть время или возможность обновить

    движок. А это значит, что человек знает, какая версия Wordpress’a стоит,

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

    делать? Необходимо убрать добавление в исходный код версии CMS

    WordPress.

    Открываем functions.php, и добавляем:

    Код:
    remove_action('wp_head', 'wp_generator');
    Желательно также удалить файл readme.html в корневой папке сайта. В нём тоже содержится информация о текущей версии Wordpress.

    6. Убиваем админа! Нет дефолтному юзернейму «admin».
    Злоумышленникам намного легче получить доступ к вашему сайту при

    помощи брута, особенно, если логин уже известен. Легче всего взломать

    сайты, если стоит стандартный логин «admin» для администирования сайта.

    В версии 3.0 CMS WorsPress и выше, имеется возможность изменить

    стандартный логин для администратора. Для всех остальных (ранних) версий

    необходимо выполнить один SQL-запрос (например через phpMyAdmin):

    Код:
    UPDATE wp_users SET user_login = 'Ваш новый логин' WHERE user_login = 'Admin';

    7. Организация предварительной аутентификации на файле wp-login.php

    Как правило, первым попадает под удар файл входа в административную

    панель wp-login.php. Самый простой метод защиты, это скрыть этот файл

    (переименовать или сделать доступным на произвольном порту). Но иногда

    такие методы приносят массу неудобств, к примеру для блогов с большим

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

    Введем предварительную авторизацию с использованием HTTP Auth Basic

    средствами PHP, конфиги веб-сервера трогать не станем, что придаст

    методу наибольшей универсальности.

    Создаем файл preauth.php со следующим кодом:

    Код:
    $p = "md5_hash_of_pass";
    
    $u = "Login";
    
    function a() {
    
        header('WWW-Authenticate: Basic realm="Administration Area"');
    
        header('HTTP/1.1 401 Unauthorized');
    
        if ($_SESSION['pre']!=1) echo 'Preauthentication required!';
    
        $_SESSION['pre']='';
    
        exit;
    
    }
    
    if (!isset($_SERVER['PHP_AUTH_USER']) or !isset($_SERVER['PHP_AUTH_PW'])) {
    
    a();
    
    } else if($_SERVER['PHP_AUTH_USER'] == $u and md5($_SERVER['PHP_AUTH_PW']) == $p) {
    
      echo 'Preauthenticated!';
    
    } else {
    
    echo('Preauthentication failed!');
    
    $_SESSION['pre']=1;
    
    a();
    
    }
    
    ?>
    Где $p – заранее сгенерированный md5-хеш пароля, $u – логин (не

    устанавливайте те же логин и пароль, что используете для входа через

    штатную форму авторизации, иначе смысл метода потеряется).

    Модифицируем файл wp-login.php, прописываем код в самом начале файла, после “

    Код:
    include('preauth.php');
    Теперь при обращении по адресу http:// мойсайт/wp-login.php, будет

    запрошен логин и пароль из файла preauth.php, в случае корректного

    ввода, отобразится штатная форма авторизации Wordpress. Метод не только

    вдвойне затруднит подбор паролей злоумышленником, но и предоставит

    неожиданность ботам, которые вряд ли ожидают такой ответ от стандартной

    формы входа движка. Стоит учесть что файл wp-login.php будет перезаписан

    при обновлении CMS, поэтому необходимо прописать строку

    “include('preauth.php');” повторно.

    ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙ ПО УСТРАНЕНИЮ ПОСЛЕДСТВИЙ
    Если вас уже взломали, то самый безотказное “лечение” последствий

    взлома и модификации вашего сайта или блога, а также базы данных – это

    бэкап. Если вы самостоятельно не делали резервных копий, обратитесь в

    техническую поддержку, дата-центр регулярно проводит резервное копирование клиентских сайтов.

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

    Проще всего это увидеть по дате изменения файла;

    • Постарайтесь сразу определить, какие именно файлы были заменены, это может быть как index.php, так и файлы шаблонов, изображений и т.п. Определить характер используемой уязвимости и IP-адрес злоумышленника;
    • Сделайте скриншоты последствий;
    • Обязательно оповестите техническую поддержку и согласуйте свои дальнейшие действия;
    • Сохраните в отдельный каталог файлы сайта, время модификации файлов в дальнейшем поможет Вам определить злоумышленника;
    • Восстановите из резервной копии сайт или обратитесь для этого в тикет-систему нашей технической поддержки;
    • Скачайте логи ошибок и доступа к сайту, лучше скопировать их в отдельный каталог, чтобы не удалились при ротации логов;
    • Анализ времени изменения файлов и сопоставления с записями в логах позволяют
    • Обновите Worpress и все плагины до актуальной версии, откажитесь от использования подозрительных плагинов;
    • Обязательно смените все пароли доступа.

    ЗАКЛЮЧЕНИЕ
    Безопасность вашего сайта или блога — задача не только разработчика,

    Напоследок приведем несколько тривиальных советов вебмастеру:

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

    Понравился пост? Поделись с друзьями!

Реклама