Несколько важных действий для повышения безопасности вашего worpress блога, которые нужно выполнить в обязательном порядке, иначе ваш блог будет гарантировано взломан в автоматическом режиме в ближайшего пару месяцев.
Скрываем версию wordpress
Просто устанавливаем плагин Meta Generator and Version Info Remover из официального репозитория worpress, можно прямо в разделе плагинов вашего блога.
Настройки в wp-config.php
Открываем файл wp-config.php и в самое начало вставляем следующий код:
/**
* Security
*/
// disable error reporting
error_reporting(0);
@ini_set('display_errors', 0);
// force auto update
define('WP_AUTO_UPDATE_CORE', true);
// disable file edditing
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);
Права доступа
Директории — 755 или 750, файлы — 644 или 640, на wp-config.php — 600.
Удалить всё лишнее
- Удалить все ненужные плагины и все неиспользуемые темы.
- Удалить файлы типо README, example и т.п.
- Удалить из /wp-admin файлы install.php и upgrade.php.
Настройка Nginx
В файле хоста в разделе server добавляем следующие правила nginx для защиты wordpress:
# Раскоментировать если nginx собран с модулем "ngx_http_autoindex_module"
autoindex off;
# Запрещаем доступ ко всем ULR-ам, которые ЗАКАНЧИВАЮТСЯ следующими вхождениями
location ~* /((wp-config|plugin_upload|xmlrpc).php|(readme|license|changelog).(html|txt|md)|(debug|access|error)(.|_)log)$ {
return 444;
}
# Запрещаем доступ ко всем URL, которые СОДЕРЖАТ следующие вхождения
location ~* /.*((wp-config|xmlrpc).*(php(_bak|~|#)|txt|old|bak|save|orig(|inal)|swp|swo)).*$ {
return 444;
}
# Запрещаем все URL-ы, в параметрах (..?a=evil) которых есть следующие вхождения
if ($query_string ~* "^(.*)(wp-config.php|dl-skin.php|xmlrpc.php|uploadify.php|admin-ajax.php|local.xml)(.*)$") {
return 444;
}
# Для противодействия SQL-инъекциям <https://habr.com/company/xakep/blog/259843/>
if ($query_string ~* "(concat.*\(|union.*select.*\(|union.*all.*select)") {
return 444;
}
# Запрещаем вывод информации об авторах
if ($query_string ~* "author=[0-9]") {return 301 $scheme://$host/;}
# Запрет для загруженных скриптов
location ~* /(?:uploads|files)/.*\.(php|cgi|py|pl)$ {return 444;}
# Запрещаем ссылки вида //blog.ru/wp/wp-content/.. и //blog.ru/page/wp-content/..
location ~* /(wp|page)/.*wp-.*/.*$ {return 444;}
# Активно препятствуем fingerprinting-у утилиты WPScan (http://wpscan.org/)
location = /wp-includes/css/buttons-rtl.css {
if ($http_referer !~* "/wp-admin") {return 404;}
}
location = /wp-includes/js/tinymce/wp-tinymce.js.gz {
if ($http_referer !~* "/wp-admin") {return 404;}
}
# И так же для WPScan (который запрашивая robots.txt посылает referer сайта, хотя его быть не
# должно) закрываем доступ к этому самому robots.txt, делая вывод тулзы ещё менее информативный
location = /robots.txt {if ($http_referer != "") {return 404;}}
# Закрываем доступ к корню следующих директорий
location = /wp-content/ {return 404;}
location = /wp-includes/ {return 404;}
location = /wp-content/plugins/ {return 404;}
location = /wp-content/uploads/ {return 404;}
location = /wp-content/themes/ {return 404;}
location = /wp-content/languages/ {return 404;}
location = /wp-content/languages/plugins/ {return 404;}
location = /wp-content/languages/themes/ {return 404;}
# Закрываем прямой доступ у содержимому корневых директорий плагинов (для предотвращения
# их ракрытия)
location ~* /wp-content/plugins/([0-9a-z\-_]+)(/|$) {return 404;}
# Закрываем доступ к файлам перевода (для невозможности раскрыть версию WP)
location ~ /wp-content/languages/(.+)\.(po|mo)$ {return 404;}
# https://habr.com/post/168739/
if ($http_user_agent ~* (nmap|nikto|wikto|sf|sqlmap|bsqlbf|w3af|acunetix|havij|appscan|nic.ru|monitoring|semalt|virusdie|indy|perl|php|python|wpscan)) {return 403;}
# Блокируем конкретные юзер-агенты, в частности - пустой и "-"
if ($http_user_agent ~ ^(|-|_)$) {return 403;}
Свежие комментарии