Внимание скидки! Спешите забрать свой промокод!

Блог / Защита и оптимизация работы WordPress

Я расскажу о том, какие шаги я предпринимаю для защиты и оптимизации WordPress, помимо плагина d-wp.

Будет рассмотрен акселератор php XCache, настройки htaccess и файлы локализации WP.



Ускоряем WordPress с помощью XCache

В первую очередь я устанавливаю расширение PHP, которое называется XCache. Это расширение является акселератором PHP и заставляет работать PHP скрипты быстрее за счет того, что кэширует скомпилированный байткод.

Я покажу, как это расширение включается в панели ISP, для других панелей или чистой установки на сервера есть множество мануалов в сети.

Для начала открываем панель ISP Manager, переходим в раздел «Настройки web-сервера» → «PHP»


Далее выбираете вашу версию PHP, нажимаете «Расширения», в появившемся окне находите запись «xcache». Если напротив записи стоит иконка в виде синей лампочки, значит расширение не установлено, выделяем его и нажимаем кнопку «Установить», которая находится над списком.


На этом все, установка xcache завершена. Так же ISP сразу настраивает расширение, поэтому нам больше ничего не надо делать.

Существуют альтернативы xcache, например, eAccelerator или PHP-APC, но у меня как-то исторически сложилось, что я использую именно его, т.к. с другими у меня были проблемы в работе WP, а с xcache проблем не замечал, поэтому и остановился на нем.



Защищаем WordPress с помощью htaccess

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

Прячем админку

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

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^zzzz/?$ /wp-login.php?xxxxxxxxxxxxxxxxx [R,L]
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$
RewriteRule ^zzzz/?$ /wp-login.php?xxxxxxxxxxxxxxxxx&redirect_to=/wp-admin/ [R,L]
RewriteRule ^zzzz/?$ /wp-admin/?xxxxxxxxxxxxxxxxx [R,L]
RewriteCond %{SCRIPT_FILENAME} !^(.*)admin-ajax\.php
RewriteCond %{HTTP_REFERER} !^(.*)/wp-admin
RewriteCond %{HTTP_REFERER} !^(.*)/wp-login\.php
RewriteCond %{HTTP_REFERER} !^(.*)/zzzz
RewriteCond %{QUERY_STRING} !^xxxxxxxxxxxxxxxxx
RewriteCond %{QUERY_STRING} !^action=logout
RewriteCond %{QUERY_STRING} !^action=rp
RewriteCond %{QUERY_STRING} !^action=postpass
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$
RewriteRule ^.*wp-admin/?|^.*wp-login\.php / [R,L]
RewriteCond %{QUERY_STRING} ^loggedout=true
RewriteRule ^.*$ /wp-login.php?xxxxxxxxxxxxxxxxx [R,L]
</IfModule>

Вместо "xxxxxxxxxxxxxxxxx" надо указать случайный набор букв и цифр, например "DxcvK456Lwteu34Sdgi4s6dfKDsd5JF"

Вместо "zzzz" надо указать какое-нибудь свое слово, страница админки будет доступна по адресу site.ru/zzzz


Закрываем файлы

Если не используете комментарии:

<FILES wp-comments-post.php>
Order allow,deny
Deny from all
</FILES>


Если не используете функции крона (например, отложенная публикация):

<FILES wp-cron.php>
Order allow,deny
Deny from all
</FILES>


Если не используете регистрацию пользователей:

<FILES wp-signup.php>
Order allow,deny
Deny from all
</FILES>


Дополняет предыдущую запись, подтверждение регистрации по email:

<FILES wp-activate.php>
r.php>
Order allow,deny
Deny from all
</FILES>


Публикация статей статей по email, если не используете, можно закрыть:

<FILES wp-mail.php>
Order allow,deny
Deny from all
</FILES>


Если не используете публикацию через xml-rpc, то желательно закрыть и его:

<FILES xmlrpc.php>
Order allow,deny
Deny from all
</FILES>


Вывод ссылок блогролла в виде opml, можно закрывать, т.к. это рудимент и в новых версиях WP давно не используется:

<FILES wp-links-opml.php>
Order allow,deny
Deny from all
</FILES>


Следующие 5 директив используются для загрузки окружения WP, не используется извне, поэтому можно смело закрывать:

<FILES wp-blog-header.php>
Order allow,deny
Deny from all
</FILES>

<FILES wp-config.php>
Order allow,deny
Deny from all
</FILES>

<FILES wp-config-sample.php>
Order allow,deny
Deny from all
</FILES>

<FILES wp-load.php>
Order allow,deny
Deny from all
</FILES>

<FILES wp-settings.php>
Order allow,deny
Deny from all
</FILES>


Блокируем ботов

Следующим этапом снижаем нагрузку на сервер за счет блокировки доступа различным ботам.

Вот список самых активных ботов, которых я баню у себя на серверах:

SetEnvIfNoCase User-Agent "SputnikBot" badbot
SetEnvIfNoCase User-Agent "Yahoo" badbot
SetEnvIfNoCase User-Agent "bingbot" badbot
SetEnvIfNoCase User-Agent "MJ12bot" badbot
SetEnvIfNoCase User-Agent "AhrefsBot" badbot
SetEnvIfNoCase User-Agent "AskTbPTV" badbot
SetEnvIfNoCase User-Agent "FunWebProducts" badbot
Deny from env=badbot


На этом настройка htaccess завершена. Готовый файл можно скачать тут: d_wp_htaccess.zip, главное не забудьте настроить вход в админку, заменив xxxxxxxxxxxxxxxxx и zzzz на свои значения. Лучше всего это сделать в блокноте, через поиск и замену, так как они указываются в нескольких местах.



Локализация WordPress

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


Файлы локализации можно скачать тут: d_wp_locale.zip
Далее их необходимо распаковать в папку wp-content\languages и выбрать локализацию в настройках WP. К слову, другие локализации из этой папки я удаляю, чтобы зря не занимали место.

comments powered by Disqus