Управление файлами cookie, которые используются для рекламы, таких как персонализация рекламы, ремаркетинг и анализ эффективности рекламы.
2.14.1.17. Защита от взлома сайта на WordPress
Внимание!
Перед выполнением каких-либо действий создайте резервные копии сайта и базы данных.- Регулярно обновляйте WordPress, темы и плагины. В настоящее время доля CMS WordPress превышает 30% всех веб-сайтов в мире. Из-за огромной распространенности WordPress является популярной целью для хакеров. Поскольку WordPress это CMS с открытым исходным кодом, любой может получить доступ к коду, чтобы узнать и улучшить его. Однако это также означает, что хакеры могут изучить его и найти способы проникнуть на веб-сайты.
Каждый раз, когда обнаруживается уязвимость, разработчики WordPress прилагают все усилия, чтобы выпустить обновление, которое устраняет проблему. Если вы не используете последнюю версию WordPress, вы используете программное обеспечение с известными уязвимостями безопасности. - Удалите все неиспользуемые темы из директории
wp-content/themesи неиспользуемые плагины из директорииwp-content/plugins. Хранение бесплатных тем и плагинов в разы увеличивает вероятность взлома сайта. Если тема или плагин неактивны, они все равно позволяют открывать вредоносные скрипты из каталогаwp-content/themes/имя_темыилиwp-content/plugins/имя_плагина. - Более половины бесплатных тем WordPress заражены или уязвимы. Если вы скачиваете премиум-темы с ресурса, где они размещены бесплатно, с большой вероятностью они содержат вредоносный код или спам-ссылки.
- Отключите отображение версии 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'); - Переместите конфигурационный файл
wp-config.phpна директорию выше текущей. Файлwp-config.phpсодержит основные настройки вашего сайта и это самый важный файл в корневом каталоге сайта. В текущей архитектуре WordPress файл конфигурации проверяется с самым высоким приоритетом. Таким образом, даже если он хранится в одной папке выше корневого каталога, WordPress всё ещё сможет его видеть. Вам нужно переместить данный файл из каталога/home/имя_хостинг_аккаунта/имя_сайта/www/в каталог/home/имя_хостинг_аккаунта/имя_сайта/. Внимание! Данная рекомендация применима только в случае использования одного поддомена. - Измените префикс базы данных. Сделать это можно с помощью phpMyAdmin:
- Скопируйте полученный список всех таблиц в базе и для каждой таблицы создайте подобный запрос:
RENAME TABLE `wp_comments` TO `wpnew1_comments`; - Выполните созданные запросы:

- Чтобы убедиться, что префикс
wp_больше не используется, выполните запрос:SELECT * FROM `wpnew1_options` WHERE `option_name` LIKE '%wp_%' - Вручную измените префикс на новый, используя кнопку «Изменить»:

- Проделайте такие же действия после выполнения следующего запроса:
SELECT * FROM `wpnew1_usermeta` WHERE `meta_key` LIKE '%wp_%' - Последним шагом откройте конфигурационный файл
wp-config.phpи измените префикс на новый:
- Измените стандартный логин администратора
admin:- Откройте её и найдите в колонке
user_loginлогинadmin. Нажмите «Изменить», впишите новый логин администратора и сохраните изменения:
- Измените URL админ-панели. Для этого используйте плагин Protect Your Admin:
- Установите плагин, откройте меню плагина, замените URL и нажмите «Save»:

- В разделе «Настройки → Постоянные ссылки» установите опцию «Название записи»:
Теперь админ-панель будет доступна по адресу вида example.com/wpmyadmin.
- Запретите доступ к файлу
xmlrpc.php. Для этого в корневом каталоге сайта в файл.htaccessдобавьте один из вариантов ограничения:# Редирект на локальный адрес. В логе будет код ответа 301. RewriteRule ^xmlrpc\.php$ "http\:\/\/127\.0\.0\.1\/" [R=301,L] # Запрещаем доступ к файлу. В логе будет код ответа 403. RewriteRule ^xmlrpc.php$ - [F,L] - Отключите выполнение PHP-файлов в директории загрузок. Это распространенное место для загрузки вирусов. Чтобы предотвратить выполнение вредоносного кода в случае взлома, добавьте в файл
wp-content/uploads/.htaccessследующий код:<Files ~ "\.(php)$"> Order allow,deny Deny from all </Files> - Ограничьте доступ по 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-адрес. - Небольшой файрвол для сайта. Данные правила могут замедлить работу сайта, так как каждый запрос, поступающий на сайт, будет анализироваться с их помощью. Если вы заметите существенное снижение скорости работы сайта, не следует использовать данные правила. Вместо этого попробуйте воспользоваться плагином Wordfence Security — Firewall & Malware Scan.
Добавьте код файрвола в файл.htaccessв корневом каталоге сайта:<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>
(6)

