Одним из слабых мест в WordРress является интерфейс XML-RPC. С его помощью можно публиковать записи, используя офлайновые редакторы. Так же он работает при пингации. Понятно, что постоянно открытый для внешних запросов механизм публикации – потенциально опасное место, и его нужно как-то защитить. Лично я предпочитаю избавляться даже от теоретической возможности проникнуть в блог, поэтому в некоторых блогах запретил пингацию и возможность удаленной публикации записей.
Отключение удаленной публикации
Для того, чтобы запретить публикацию с помощью внешних средств через XML-RPC, нужно зайти в раздел Параметры – Описание, и отключить протоколы публикации.
Запрет пингации
Если кто-то в интернете публикует ссылку, ведущую на ваш сайт, то в блог посылается специальное уведомление об этом. В зависимости от настроек WordPress это уведомление может с помощью XML-RPC быть опубликовано в блоге в комментариях. очень часто этой возможностью пользуются спаммеры, оставляя в блоге ссылки на свои сайты. Лично я вообще отказался от всякого рода уведомлений, как в сторону блога (трекбэки), так и в обратную сторону (пинги): Обратные ссылки и уведомления – прощайте!.
Для запрета уведомлений (пинги и трекбэки) нужно зайти в раздел Параметры – Обсуждение, и отключить пункты Пытаться оповестить блоги, упоминаемые в статье и Разрешить оповещения с других блогов (уведомления и обратные ссылки). После этого ваш блог перестанет быть источником спама, и перестанет принимать спам с других блогов под видом уведомлений.
Однако это не все – изменения вступят в силу только для постов, опубликованных с этого момента, а настройки старых постов останутся прежними. Чтобы запретить пинги и трекбэки в старых, уже опубликованных, постах, нужно зайти в phpMyAdmin и выполнить команду:
UPDATE wp_posts SET ping_status="closed";
Вот теперь все – уведомления отключены полностью. Обратите внимание, что wp_posts – это таблица в базе данных, в которой хранятся настройки для каждого поста. Если вы при создании базы данных использовали стандартный префикс wp_, то ничего менять в коде не нужно – он написан с учетом стандартного префикса. Если же вы использовали не стандартный префикс, например, wpxxx_, то и команда будет выглядеть по-другому:
UPDATE wpxxx_posts SET ping_status="closed";
Удаление XML-RPC
После того, как вы отключили уведомления, и запретили использовать механизм удаленной публикации, удалите XML-RPC из файла header.php. Код, задействующий этот интерфейс выглядит примерно так:
</pre> <p>или так:</p> <pre><link rel="pingback" href="" />
Вы можете удалить эти строчки. Я раньше думал, что удаление этих ссылок запрещает пингацию и публикацию со стороны. Однако, заглянув в исходный код страницы блога, обнаружил, что он на месте. Оказывается, WordPress автоматически вставляет в исходный код страниц
</pre> <p>Эта ссылка добавляется фильтром из файла wp-includes/default-filters.php. Чтобы ее удалить, нужно или открыть этот файл и закомментировать этот фильтр</p> <pre>//add_action('wp_head', 'rsd_link');
либо добавить в файл functions.php
remove_action('wp_head', 'rsd_link');
Так же следом в файл functions.php можно добавить
remove_action('wp_head', 'wlwmanifest_link');
Этот код запретить работу с блогом редактору Windows Live Writer.
Удаление файлов
После того, как вы все запретили и почистили исходный код страниц от ненужных ссылок, можно удалить файлы, которые непосредственно отвечают за пингацию и работу интерфейса XML-RPC:
- wp-trackback.php
- xmlrpc.php
Теперь уж точно злоумышленники не смогут воспользоваться интерфейсом XML-RPC, даже если и обнаружится какая-то не перекрытая дыра в безопасности.