Закрываем доступ к важным файлам в WordPress

Защищаем wp-config.php

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

Закроем к нему доступ в файле .htaccess

<Files ~ wp-config.php>
Order Deny,Allow
Deny from all
Allow from 123.456.789
</Files>

где 123.456.789 — ваш айпи (узнать можно тут)

А если нужно разрешить нескольким айпи доступ, то напишем вот так

<Files ~ wp-config.php>
Order Deny,Allow
Deny from all
Allow from 123.456.789
Allow from 456.789.123
Allow from 789.123.456
# additional IP addresses
</Files>

Защищаем директорию wp-admin

Следующим шагом будет настроить защиту файлов, находящихся в папке wp-admin, что является критическим для вашего сайта. Самый простой способ — это ограничить доступ к папке по айпи. Необходимо внутри папки разместить файл .htaccess с содержимым

<FilesMatch "*.*">
Order Deny,Allow
Deny from all
Allow from 123.456.789
</FilesMatch>

Как и ранее, будет запрещен доступ всем, кроме вашего айпи. Если на сервере настроен mod_rewrite Apache, то синтаксис запрета будет немного другой

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^123.456.789
RewriteRule ^(.*)$ - [F,L]
</IfModule>

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

RewriteRule ^(.*)$ https://domain.tld/ [R,L]

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

Защищаем вход в админку

Вход на сайт — лакомый кусочек для хакеров. Это своего рода виртуальная дверь в админку. Есть несколько эффективных стратегий защиты:

  • Сложный пароль
  • Частое изменение пароля
  • Запрет доступа на вход

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

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

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

Другой способ улучшить безопасность — это убрать сообщение об ошибке входа на сайт, т.к. она содержит информацию о том, что было введено неправильно — логин или пароль. Добавив в functions.php следующий код

add_filter('login_errors',create_function('$a', "return null;"));

мы полностью отключаем это уведомление.

Следующий вариант — плагин WP-Adminprotection, который определяет разрешенные айпи для авторизации. Для всех остальных доступ будет заблокирован.

Еще один интересный способ — плагин AskApache Password Protect, создающий дополнительный пароль для доступа к папке админки. Т.е., чтобы войти на сайт, нужно знать пароль доступа к папке и пароль доступа к админке.

Если же вы оказались в ситуации, когда забыли пароль к сайту, а доступа к почте нет, чтобы восстановить пароль, можно создать свой новый пароль прямо в базе данных сайта. Для этого:

  1. используя phpMyAdmin зайдите в свою базу данных
  2. найдите таблицу wp_users и выберите своего пользователя
  3. в поле user_pass вы увидите свой старый зашифрованный пароль, замените его на свой новый пароль
  4. выберите опцию MD5 из выпадающего меню и сохраните изменения

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

Блокируем доступ на страницу логина

Блокирование доступа — отличный способ защиты, однако это помешает простым пользователям зарегистрироваться и авторизироваться на сайте. Специфика вордпресс такова, что код авторизации и регистрации на сайте находится в одном файле wp-login.php, а для регистрации на сайте нужно открывать урл https://domain.tld/wp-login.php?action=register

Если вы не единственный автор или пользователь сайта, то придется применять несколько другие варианты. А в случае единственного пользователя сайта можно использовать уже знакомый код

<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 123.456.789.0
</Files>

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

Для этого создается текстовый файл с желаемыми логином и зашифрованным паролем, записанными в следующем виде

anakin:y5gj8dwr39jg2

Чтобы сгенерировать корректный пароль, нужно воспользоваться сервисом, в который вводите придуманный логин и пароль. А взамен получаете логин и зашифрованный пароль. Полученную строку сохраняете в файл .htpasswd и размещаете его где-то не в корневой директории. Запомните это место.

Теперь в файле .htaccess, размещенном в папке wp-admin, сохраняете следующий код

<IfModule mod_auth.c>
AuthUserFile /full/path/.htpasswd
AuthType Basic
AuthName "Password Required!"
<Files wp-login.php>
Require valid-user
</Files>
</IfModule>

где  /full/path/.htpasswd полный путь к вашему файлу логинапароля.

Если вы хотите добавить парольный доступ не только к файлу wp-login.php, а ко всей директории, то добавьте такой вариант кода

<IfModule mod_auth.c>
AuthUserFile /full/path/.htpasswd
AuthType Basic
AuthName "Password Required!"
Require valid-user
</IfModule>

Этот уровень защиты очень высокий. Каждая сессия прекращается при закрытии браузера, поэтому повторно без вас даже с вашего компьютера никто не сможет войти на сайт. Если же возникают неожиданные ошибки, то просто удалите этот код из файла htaccess

Кроме этого для дополнительной защиты стоит использовать 8 опций ключей. Есть специальный генератор, создающий уникальные и неповторимые защитные ключи https://api.wordpress.org/secret-key/L1/salt/, которые нужно скопировать и вставить в файл wp-config.php вместо тех, что прописаны там.

Остальные файлы, нуждающиеся в защите

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

  • .htaccess
  • .htpasswd
  • php.ini
  • PHP скрипты
  • .fla, .psd файлы — файлы флеш и фотошопа
  • лог файлы

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

<FilesMatch ".(htaccess|htpasswd|ini|php|fla|psd|log)$">
Order Deny,Allow
Deny from all
Allow from 123.456.789.0
</FilesMatch>

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

Удаляем номер версии Вордпресс

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

Вот код, который выводит номер версии

<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" />

Соответственно, для предотвращения вывода этой информации либо физически удаляем эту функцию из файла header.php, либо, если она генерируется функцией wp_generator из глубины ядра вордпресса, то удаляем через вставку кода в functions.php

<?php remove_action('wp_head', 'wp_generator'); ?>

Защищаем Базу Данных

Не устаем напоминать, как важна и ценна база данных сайта. Поэтому также озаботьтесь ее защитой. Стандартный префикс базы данных wp_. Миллионы сайтов используют этот префикс и огромное количество хакеров знает об этом. Многие SQL-инъекции и автоматические эксплоиты используют этот префикс в процессе атаки. Поэтому, изменив префикс, мы обломаем хороший процент ломателей.

Вот подходящие плагины для этой цели

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

Меняем префикс перед установкой вордпресс — для этого в процессе инсталляции выбираете нетипичный и неочевидный вариант, например sdfo_

Меняем префикс для существующего сайта

  1. Бекап!
  2. Меняем в файле wp-config.php значение $table_prefix на новое.
  3. Выполняем запрос к базе данных через phpMyAdmin

Запросы должны быть следующие (вместо ххх укажите свой новый префикс)

rename table wp_comments to xxx_comments;
rename table wp_links to xxx_links;
rename table wp_options to xxx_options;
rename table wp_postmeta to xxx_postmeta;
rename table wp_posts to xxx_posts;
rename table wp_terms to xxx_terms;
rename table wp_term_relationships to xxx_term_relationships;
rename table wp_term_taxonomy to xxx_term_taxonomy;
rename table wp_usermeta to xxx_usermeta;
rename table wp_users to xxx_users;

Также проверьте, какие еще есть таблицы и в них тоже измените префикс. Затем откройте таблицу options и в колонке option_name найдите wp_user_roles и замените его на xxx_user_roles. Кстати, после установки вордпресс содержит 11 таблиц, но в процессе эксплуатации это число может вырасти значительно.

Откройте таблицу usermeta и в колонке meta_key найдите все поля с префиксом wp_ и замените на новые.

После этих шагов проверьте сайт и все плагины на работоспособность.

Альтернативный способ изменения префикса — это скачать копию базы данных как sql файл и в нем правкойзаменой заменить все вхождения wp_ на новый префикс. После этого удалите старую базу данных и импортируйте новую из этого файла.

Это очередной пример прелести вордпресс — одну задачу можно решить массой способов.

Безопасные множественные инсталляции

Учтите, что если у вас есть множество инсталляций на одном сервере, то будет верным дать разные полномочия разным базам данных. Т.е. для каждой базы данных своя отдельная база (а не все базы делаются в общей базе через разные префиксы) и свой отдельный пользователь с разными именами и паролями. Это позволит защитить все остальные сайты в случае взлома одного из них.

Предотвращаем хотлинкинг

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

Такой подход даже хуже воровства, т.к. создается еще и дополнительная нагрузка на сайт помимо утаскивания контента.

Ну прямо как пиявки присосались к вашему сайту...

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

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} .(gif|jpe?g?|png)$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://([^.]+.)?domain. [NC]
RewriteRule .(gif|jpe?g?|png)$ - [F,NC,L]
</IfModule>

Теперь, если какое-либо изображение будет пытаться грузиться не с вашего сайта, а любого внешнего — будет показана ошибка.

Но есть одно НО!                      

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

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} .(gif|jpe?g?|png)$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://([^.]+.)?domain. [NC]
RewriteCond %{HTTP_REFERER} !^https://www.feedburner.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^https://feeds.feedburner.com/example-feed$ [NC]
RewriteCond %{HTTP_REFERER} !^https://feeds.feedburner.com/example-feed-comments$ [NC]
RewriteRule .(gif|jpe?g?|png)$ - [F,NC,L]
</IfModule>

Ну и понятно, что вместо domain укажите домен своего сайта.

Еще больше помощи в защите

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

  • Secure WordPress —предлагает массу различных настроек безопасности и инструментов защиты
  • WP Security Scan — сканирует вордпресс на известные уязвимости и предлагает методы их решения
  • WordPress File Monitor Plus — сканирует файлы вордпресс на наличие вредного кода и уведомляет о результатах проверки. Если файл пропал, изменился или переместился — вы сразу об этом узнаете.
  • Ultimate Security Check — сканирует на сотни различных проблем и предлагает улучшения безопасности.
  • BulletProof Security — создает защиту сайта на основе хитрых конфигураций .htaccess, блокируя XSS, RFI, CRLF, CSRF, Base64, Code инъекции и SQL инъекции
  • WordPress AntiVirus — эффективное решения для защиты сайта от различных заражений
  • WordPress Firewall — блокирует потенциальные угрозы на основе списка подозрительных параметров
  • Stealth Login — защищает админку сайта
  • Exploit Scanner — сканирует файлы, базу данных и плагины на различные подозрительные вещи
  • Block Bad Queries — блокирует слишком длинные запросы к сайту, а также различные потенциально опасные

Останавливаем спам в комментариях

Спам в комментариях — это чума, которая пытается поглотить каждый форум или сайт с открытыми комментариями, и вордпресс не исключение. Но нет повода для печали — нам помогут несколько плагинов и полезных настроек.

  • Akismet — идет в комплекте вордпресс, легко настраивается и эффективно работает
  • Bad Behavior — анти-спам защита и дополнительный функционал защиты блога
  • WP-SpamFree — уничтожает автоматический спам без помощи капч
  • NoSpamNX — добавляет скрытые поля для блокировки плохих ботов

Настраиваем опции в админке

Ранее мы уже подробно обсуждали безопасные и надежные опции в меню Параметры→Настройки обсуждения, позволяющие полностью отключить комментирование. Если же возможность оставлять комментарии нужна, то стоит настроить тотальный контроль и модерацию всего публикуемого контента. Это позволит как минимум избежать опубликованного и видимого на сайте спама, т.к. он будет висеть в очереди на проверку.

Используем встроенные инструменты модерации

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

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

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

Отключаем комментарии в старых записях

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

Легкое и простое решение — автоматически закрывать обсуждение статей старше заданного числа дней. В зависимости от типа публикуемого у вас контента и скорости его устаревания, это число стоит варьировать. Например, если у вас публикуются новости, то их можно закрывать уже через 14 дней, если тематические статьи, то через 30-60 дней.

Блокируем доступ запросам

Многие скрипты спамботов целятся непосредственно на скрипт комментариев вордпресса, пропуская заполнение формы комментариев на странице. Легкий способ вычислить такое поведение — это блокировать все запросы к скрипту комментариев, не содержащие ваш оригинальный домен, т.е. сделанные из ниоткуда. Для этого в htaccess записывается следующий код

<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post. [NC]
RewriteCond %{HTTP_REFERER} !.*digwp. [OR,NC]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) - [F,L]
</IfModule>

где вместо  digwp напишите свой домен.

Вместо запрещения доступа, можно перенаправлять спаммеров на определенную страницу

RewriteRule ^(.*)$ https://%{REMOTE_ADDR}/ [R=301,L]

Данный код возвращает спаммеров назад на ту страницу, из которой они пришли. Либо можно указать любой другой адрес. Но этот метод не имеет 100% эффективности, т.к. некоторые спам скрипты умеют имитировать реферер, делая вид, что они честные комментаторы.

Мониторим и исправляем ошибки

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

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

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

Для поиска битых ссылок мы уже рекомендовали плагин Broken Link Checker, с помощью которого можно найти все битые ссылки и принять решение, что с ними сделать — удалить или исправить. А для вычисления страниц с ошибкой 404 — плагин 404 Notifier.

Также опция мониторинга 404 ошибок входит в комплект многих плагинов настройки и обеспечения безопасности.

Другие методы регистрации ошибок

Помимо кучи предложенных и описанных плагинов, всегда найдется что-то еще, вот, например, такие полезные плагины:

  • WordPress security monitoring — отслеживает практически любую активность и действия на сайте — вы будете в курсе всего, что происходит у вас<
  • Post Logger plugin —  показывает подробности всех запросов $POST к вашему сайту, позволяя следить за всеми комментаторами
  • TTC WordPress Tripwire Tool — отслеживает изменения файлов за заданный период времени
  • InspectorWordpress — следит и сохраняет в журнал все запросы к вашему сайту

Сервисы онлайн мониторинга

Важный момент в создании и развитии сайта — это постоянный контроль над тем, что он всегда доступен для всех посетителей. В идеальном мире, ваш сайт доступен 100% времени, но из-за проблем на серверах, конфликтов программного обеспечения, вирусных атак, взломов, ддосов и т.п. ваш сайт будет недоступен время от времени.

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

  • Are My Sites Up? — платный сервис с возможностью бесплатного мониторинга в течение 15 дней
  • Pingdom — платный сервис с возможностью бесплатного мониторинга в течение 30 дней
  • Mon.itor.us — бесплатный сервис мониторинга с рассылкой писем в случае недоступности сайта, проверяет каждые 5 минут
  • Montastic — бесплатный сервис мониторинга с рассылкой писем в случае недоступности сайта, проверяет каждые 10 минут
  • BasicState — бесплатный сервис мониторинга с рассылкой писем в случае недоступности сайта, проверяет каждые 15 минут
Добавить комментарий

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

Scroll Up