Ми використовуємо cookie-файли
Для оптимізації роботи нашого сайту ми використовуємо cookie-файли. Продовжуючи використовувати сайт, Ви погоджуєтеся з використанням cookie-файлів.
Новий дизайн
Панель керування
  • Русский
  • Українська
  • English
  • UAH
  • USD
  • RUB
  • EUR
  • 0-800-307-307 Гаряча лінія
  • +38 (044) 392-74-33 Київ
  • +38 (057) 728-39-00 Харків
  • +38 (056) 794-38-31 Дніпро
  • +38 (032) 229-58-93 Львів
  • +38 (048) 738-57-70 Одеса
  • +38(093) 170-15-42  Life
  • +38 (067) 400-88-44 Київстар
  • +1(888)393-24-51  USA, Toll free
  • +44(131)507-01-14  Great Britain
  • +7 (499) 348-28-61 Москва

2.13.1.18. Захист від злому сайту на WordPress

  1. Регулярно оновлюйте WordPress, теми і плагіни. В даний час частка CMS WordPress перевищує 30% всіх веб-сайтів у світі. Через величезну поширеності WordPress є популярною метою для хакерів. Оскільки WordPress це CMS з відкритим вихідним кодом, будь-хто може отримати доступ до коду, щоб дізнатися і поліпшити його. Однак це також означає, що хакери можуть вивчити його і знайти способи проникнути на веб-сайти.
    Кожен раз, коли виявляється вразливість, розробники WordPress докладають усіх зусиль, щоб випустити оновлення, що усуває проблему. Якщо ви не використовуєте останню версію WordPress, ви використовуєте програмне забезпечення з відомими уразливими безпеки.
  2. Видаліть всі невикористовувані теми з директорії wp-content/themes і невикористовувані плагіни з директорії wp-content/plugins. Зберігання безкоштовних тим і плагінів в рази збільшує ймовірність злому сайту. Якщо тема або плагін неактивні, вони все одно дозволяють відкривати шкідливі скрипти з каталогу wp-content/themes/ім'я_теми або wp-content/plugins/ім'я_плагіна.
  3. Більше половини безкоштовних тим WordPress заражені або уразливі. Якщо ви завантажуєте преміум-теми з ресурсу, де вони розміщені безкоштовно, з великою ймовірністю вони містять шкідливий код або спам-посилання.
  4. Вимкніть відображення версії Wordpress. Зловмисники не впізнають версію, а значить не знатимуть і вразливі місця. Для цього відкрийте файл wp-content/themes/ім'я_теми/functions.php і додайте після першого рядка наступний код:
    function remove_wordpress_version_number() {
        return '';
    }
    add_filter('the_generator', 'remove_wordpress_version_number');
    function remove_version_from_scripts( $src ) {
       if ( strpos( $src, '?ver=' ) )
           $src = remove_query_arg( 'ver', $src );
       return $src;
    }
    add_filter( 'style_loader_src', 'remove_version_from_scripts');
    add_filter( 'script_loader_src', 'remove_version_from_scripts');
  5. Перемістіть конфігураційний файл wp-config.php на директорію вище поточної. файл wp-config.php містить основні настройки вашого сайту і це найважливіший файл в кореневому каталозі сайту. У поточній архітектурі WordPress конфігураційний файл перевіряється з найвищим пріоритетом. Таким чином, навіть якщо він зберігається в одній папці вище кореневого каталогу, WordPress все ще зможе його бачити. Вам потрібно перемістити даний файл з каталогу /Home/ім'я_хостинг_аккаунта/ім'я_сайту/www/ в каталог /Home/ім'я_хостинг_аккаунта/ім'я_сайту/.
  6. Змініть префікс бази даних. Зробити це можна за допомогою phpMyAdmin:
    1. Скопіюйте отриманий список всіх таблиць в базі і для кожної таблиці створіть подібний запит:
      RENAME TABLE `wp_comments` TO `wpnew1_comments`;
    2. Виконайте створені запити:
    3. Щоб переконатися, що префікс wp_ більше не використовується, виконайте запит:
      SELECT * FROM `wpnew1_options` WHERE `option_name` LIKE '%wp_%'
    4. Вручну змініть префікс на новий, використовуючи кнопку «Змінити»:
    5. Виконайте такі ж дії після виконання наступного запиту:
      SELECT * FROM `wpnew1_usermeta` WHERE `meta_key` LIKE '%wp_%'
    6. Останнім кроком відкрийте конфігураційний файл wp-config.php і змініть префікс на новий:
  7. Змініть стандартний логін адміністратора admin:
    1. Увійдіть в phpMyAdmin, виберіть базу і знайдіть таблицю префікс_users:
    2. Відкрийте її і знайдіть в колонці user_login логін admin. натисніть «Змінити», Впишіть новий логін адміністратора і збережіть зміни:
    3. Змініть URL адмін-панелі. Для цього використовуйте плагін Protect Your Admin:
      1. Встановіть плагін, відкрийте меню плагіна, замініть URL та натисніть "Save»:
      2. В розділі "Налаштування → Постійні посилання»Встановіть опцію«Назва запису»:Тепер адмін-панель буде доступна за адресою виду example.com/wpmyadmin.
  8. Забороніть доступ до файлу xmlrpc.php. Для цього в кореневому каталозі сайту в файл .htaccess додайте один з варіантів обмеження:
    # Редірект на локальну адресу. У балці буде код відповіді 301.
    RewriteRule ^xmlrpc\.php$ "http\:\/\/127\.0\.0\.1\/" [R=301,L]
     
    # Забороняємо доступ до файлу. У балці буде код відповіді 403.
    RewriteRule ^xmlrpc.php$ - [F,L]
  9. Вимкніть виконання PHP-файлів в директорії завантажень. Це поширене місце для завантаження вірусів. Щоб запобігти виконанню шкідливого коду в разі злому, додайте в файл wp-content/uploads/.htaccess Наступного код:
    <Files ~ "\.(php)$">
      Order allow,deny
      Deny from all
    </Files>
  10. Обмежте доступ по IP до адмін-панелі. Ця рекомендація підходить для тих, у кого статичний IP-адресу. У файлі .htaccess в кореневому каталозі сайту додайте наступний код:
    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$ [OR]
    RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$
    RewriteCond %{REMOTE_ADDR} !^127.0.0.1$
    RewriteRule ^(.*)$ - [R=403,L]

    Замість 127.0.0.1 впишіть ваш IP-адресу.

  11. Невеликий файрвол для сайту. Дані правила можуть уповільнити роботу сайту, так як кожен запит, який надходить на сайт, буде аналізуватися з їх допомогою. Якщо ви помітите істотне зниження швидкості роботи сайту, не слід використовувати дані правила. Замість цього спробуйте скористатися плагіном Wordfence Security — Firewall & Malware Scan.
    Додайте код файрволу в файл .htaccess в кореневому каталозі сайту:
    .htaccess.txt
    <IfModule mod_rewrite.c> RewriteEngine On # Блокування XSS RewriteCond%{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
    # Блокуємо виставлення змінної PHP GLOBALS через URL RewriteCond%{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
    # Блокуємо можливість змінювати змінну _REQUEST через URL RewriteCond%{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) # Блокування MySQL ін'єкцій, RFI, base64, і ін. RewriteCond%{QUERY_STRING} (javascript:)(.*)(;) [NC,OR]
    RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
    RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
    RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
    RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
    RewriteCond %{QUERY_STRING} (\.\./|\.\.) [OR]
    RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
    RewriteCond %{QUERY_STRING} http\: [NC,OR]
    RewriteCond %{QUERY_STRING} https\: [NC,OR]
    RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
    RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
    RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
    RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
    RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
    RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
    RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]
    RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
    RewriteCond %{QUERY_STRING} (\./|\../|\.../)+(motd|etc|bin) [NC,OR]
    RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
    RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
    RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
    RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
    RewriteCond %{QUERY_STRING} (;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
    RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR]
    RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR]
    RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR]
    RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
    RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
    RewriteCond %{QUERY_STRING} ([a-z0-9]{2000,}) [NC,OR]
    RewriteRule ^(.*)$ - [F,L]
    # Блокування відомих Shell RewriteEngine on RewriteCond%{REQUEST_URI} .*((php|my)?shell|remview.*|phpremoteview.*|sshphp.*|pcom|nstview.*|c99|r57|webadmin.*|phpget.*|phpwriter.*|fileditor.*|locus7.*|storm7.*).(p?s?x?htm?l?|txt|aspx?|cfml?|cgi|pl|php[3-9]{0,1}|jsp?|sql|xml) [NC,OR]
    RewriteCond %{REQUEST_METHOD} (GET|POST) [NC]
    RewriteCond %{QUERY_STRING} ^(.*)=(/|%2F)(h|%68|%48)(o|%6F|%4F)(m|%6D|%4D)(e|%65|%45)(.+)?(/|%2F)(.*)(/|%2F)(.*)$ [OR]
    RewriteCond %{QUERY_STRING} ^work_dir=.*$ [OR]
    RewriteCond %{QUERY_STRING} ^command=.*&output.*$ [OR]
    RewriteCond %{QUERY_STRING} ^nts_[a-z0-9_]{0,10}=.*$ [OR]
    RewriteCond %{QUERY_STRING} ^c=(t|setup|codes)$ [OR]
    RewriteCond %{QUERY_STRING} ^act=((about|cmd|selfremove|chbd|trojan|backc|massbrowsersploit|exploits|grablogins|upload.*)|((chmod|f)&f=.*))$ [OR]
    RewriteCond %{QUERY_STRING} ^act=(ls|search|fsbuff|encoder|tools|processes|ftpquickbrute|security|sql|eval|update|feedback|cmd|gofile|mkfile)&d=.*$ [OR]
    RewriteCond %{QUERY_STRING} ^&?c=(l?v?i?&d=|v&fnot=|setup&ref=|l&r=|d&d=|tree&d|t&d=|e&d=|i&d=|codes|md5crack).*$ [OR]
    RewriteCond %{QUERY_STRING} ^(.*)([-_a-z]{1,15})=(chmod|chdir|mkdir|rmdir|clear|whoami|uname|unzip|gzip|gunzip|grep|more|umask|telnet|ssh|ftp|head|tail|which|mkmode|touch|logname|edit_file|search_text|find_text|php_eval|download_file|ftp_file_down|ftp_file_up|ftp_brute|mail_file|mysql|mysql_dump|db_query)([^a-zA-Z0-9].+)*$ [OR]
    RewriteCond %{QUERY_STRING} ^(.*)(wget|shell_exec|passthru|system|exec|popen|proc_open)(.*)$
    RewriteRule .* - [F]
    </IfModule>