Безопасность WordPress REST API: все, что вам нужно знать

WordPress

WordPress REST API — это великолепный инструмент, который открывает новый мир возможностей WordPress. От разработки плагинов и тем до интеграций, headless WordPress и т. д. — чудеса, которые предлагает WordPress REST API, часто ограничиваются только вашим воображением.

Как бы замечательно все это ни было, не менее важно принять соответствующие меры, чтобы обеспечить максимальную безопасность.

В этой статье мы рассмотрим все необходимое для надлежащей защиты WordPress REST API.

Что такое REST API?

REST — это аббревиатура от Representational State Transfer. Это архитектурный стиль, часто используемый в качестве стандарта API веб-приложений. WordPress также использует REST API.

REST API определяет ряд стандартов и поведений, которые определяют, как следует отправлять и получать данные.

Запросы REST API обычно включают в себя:

  • Конечная точка: это местоположение ресурса сервера, который запрашивает клиент.
  • Заголовки: Заголовки предоставляют дополнительную информацию о сделанном запросе, например, учетные данные.
  • Метод: Метод определяет функцию запроса, например, обновление определенных данных или их удаление.
  • Тело: тело включает в себя фактическую передаваемую информацию, например, обновленную информацию в запросе на обновление.
  • Параметры: Параметры предоставляют инструкции, связанные с выполняемым запросом, такие как ссылки и метаданные.

Метод, таким образом, это то, что дает API его функциональность, поскольку он определяет, какие задачи мы можем выполнять. Общие методы REST API включают:

  • GET: используется для извлечения ресурса из WordPress, например существующей записи.
  • POST: используется для отправки нового ресурса в WordPress, например, нового сообщения.
  • DELETE: используется для удаления существующего ресурса из WordPress, например страницы.
  • PUT: используется для обновления существующего ресурса в WordPress.

Метод GET с использованием Postman

WordPress REST API

WP REST API предлагает доступ к типам данных WordPress, таким как записи, страницы и таксономии. Он позволяет вам взаимодействовать с WordPress программно. Он включен по умолчанию с каждой установкой WordPress и играет важную роль в функционировании ваших веб-сайтов.

WordPress REST API предлагает ряд функций, которые можно выполнять удаленно. Некоторые могут заметить, что они основаны на HTTP, и вы будете правы. Данные отправляются и принимаются в формате JSON (JavaScript Object Notation), что обеспечивает широкую совместимость на многих различных платформах.

Используя REST API, вы можете делать запросы напрямую к базе данных WordPress без необходимости входа на ваш сайт WordPress (хотя есть некоторые исключения). Он также позволяет автоматизировать процессы, что может улучшить рабочие процессы и открыть новые возможности.

Параметры аутентификации REST API

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

Печенье

Аутентификация с помощью cookie является методом аутентификации по умолчанию для выполнения запросов REST API. При использовании этого метода аутентификации клиент должен иметь действительный cookie. Файл cookie можно получить, войдя в панель управления WordPress с того же клиента, который будет выполнять запросы.

Базовая аутентификация

Базовая аутентификация устраняет необходимость в cookie. Вместо этого учетные данные пользователя отправляются в запросе API. Чтобы использовать этот метод, вам нужно установить плагин WordPress REST API.

Обратите внимание, что текущая доступная версия — 0.1. Настоятельно рекомендуется тестирование в тестовой среде.

Шаг 1

Загрузите ZIP-файл плагина: перейдите на страницу плагина WordPress REST API на GitHub, нажмите зеленую кнопку <> Код и выберите «Загрузить ZIP-файл» в раскрывающемся меню.

Шаг 2

Установите и активируйте плагин: на панели инструментов WordPress перейдите в раздел «Плагины» > «Добавить новый плагин», загрузите файл.ZIP и активируйте плагин после его установки.

Для аутентификации с помощью этого метода необходимо использовать действительные учетные данные пользователя WordPress. Мы обсудим учетные данные пользователя более подробно в следующем разделе.

oAuth

oAuth, сокращение от Open Authorization, — это стандартный метод аутентификации безопасности, используемый в реализациях HTTP для делегирования доступа. WordPress не предоставляет его из коробки. Таким образом, вам понадобится сторонний плагин для реализации этого типа метода аутентификации.

Аутентификация API-ключа

При использовании аутентификации по ключу API вы получаете один ключ, который остается действительным до тех пор, пока не будет сгенерирован новый ключ. Ключ передается в WordPress REST API через заголовок авторизации при доступе к конечным точкам WordPress REST API. Для включения этого метода также требуется сторонний плагин.

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

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule.* - [e=HTTP_AUTHORIZATION:%1]

Веб-токен JSON

Думайте о токенах как о куках, которые не требуют от вас входа в WordPress, как это делают куки. Однако они функционируют иначе, чем ключ API, в одном фундаментальном отношении — они истекают. Вам также нужен секретный ключ, который авторизует токены.

Чтобы использовать JSON Web Tokens, вам необходимо установить плагин WordPress, который добавляет эту функцию, поскольку она не поддерживается по умолчанию.

Безопасность аутентификации WordPress REST API

WordPress’ REST API допускает как аутентифицированные, так и неаутентифицированные запросы. Ресурсы, доступные через front end веб-сайта, обычно могут быть запрошены и предоставлены без необходимости отправки какой-либо аутентификации. С другой стороны, ресурсы и функции, доступные через панель администратора, требуют аутентификации.

Используйте сертификат SSL/TLS

Хотя HTTP может использоваться как обобщающий термин, вам нужно убедиться, что все запросы проходят через HTTPS. HTTP-запросы отправляются в виде обычного текста, что делает их легкой целью для любого, кто хочет собрать информацию для взлома вашего веб-сайта. Сертификаты TLS важны независимо от того, какой метод аутентификации вы используете. Они шифруют трафик между WordPress и клиентами, которые подключаются к нему, обеспечивая безопасный проход данных при их прохождении через Интернет.

Создайте пользовательскую роль

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

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

Требовать аутентификацию для всех запросов REST

Мы можем гарантировать безопасность всех конечных точек REST API, указав WordPress принимать только аутентифицированные запросы. Это означает, что только авторизованные пользователи могут делать запросы к API и получать ответы.

Пользователь REST не вошел в систему

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

Здесь нам нужно будет добавить фильтр в файл functions.php, который возвращает ошибку, если пользователь, сделавший запрос, не авторизован.

Добавьте следующий код в файл functions.php:

add_filter('rest_authentication_errors', function($result) {// If a previous authentication check was applied,// pass that result along without modification.if (true === $result || is_wp_error($result)) {return $result;}// No authentication has been performed yet.// Return an error if user is not logged in.if (! is_user_logged_in()) {return new WP_Error('rest_not_logged_in',__('You are not currently logged in.'),array('status' => 401));}// Our custom authentication check should have no effect// on logged-in requestsreturn $result;});

Белый список IP-адресов

Ограничение подключений к серверу с определенных IP-адресов также повышает безопасность REST API, поскольку подключение будет разрешено только IP-адресам доверенных клиентов.

Помните, что белый список IP-адресов будет работать только в том случае, если вы знаете, кто будет делать запросы API, и у этого человека есть статический IP-адрес.

Вы можете добавить IP-адреса в белый список несколькими способами, в том числе через файл functions.php или файл.htaccess. Вы также найдете сторонние плагины, такие как Wordfence, которые позволят вам ограничить доступ через его пользовательский интерфейс.

Например, чтобы добавить IP-адреса в белый список через файл.htaccess, просто добавьте следующий код, заменив ip_address на IP-адреса, которые вы хотите добавить в белый список:

<FilesMatch "wp-json">
    Order Deny,Allow
    Deny from all
    Allow from ip_address_1
    Allow from ip_address_2
</FilesMatch>

Белый список IP-адресов через файл.htaccess

Дополнительные советы по безопасности WordPress REST API

Защитите свою конечную точку WordPress REST API еще лучше, внедрив следующие рекомендации по безопасности:

Установить плагин журнала активности

Ведение журнала всех изменений, выполненных через вызовы API, гарантирует, что у вас будет запись активности, к которой вы можете обратиться, если у вас возникнут подозрения о нелегитимном доступе или несанкционированных изменениях. Плагин WP Activity Log ведет журнал аутентифицированных запросов, выполненных через REST API.

Каждая запись журнала содержит полезную информацию, такую ​​как пользователь, внесший изменение, IP-адрес, с которого был отправлен запрос, дату и время, а также другую важную информацию.

Проверка входных данных

Проверка ввода предотвращает обработку некорректных данных. Такие атаки, как XSS (Cross-Site Scripting) и SQL-инъекция, искажают строки ввода, чтобы внедрить вредоносный код в строки ввода. Хотя эти типы атак распространены, их можно предотвратить с помощью проверки ввода.

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

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

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

$email = sanitize_email($request->get_param('email'));

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

Ограничение скорости

Ограничение скорости ограничивает количество запросов, которые могут быть сделаны в течение определенного периода. Ограничения могут быть установлены клиентом или местоположением. Вы также можете установить ограничения на самом сервере, которые применяются независимо от клиента или местоположения, из которого сделаны запросы.

Ограничения можно устанавливать несколькими способами, включая жесткие ограничения, которые останавливают обработку запросов к каждой конечной точке REST API до тех пор, пока такие ограничения не будут сняты, и регулирование, которое замедляет обработку запросов. Самый простой способ реализовать ограничение скорости — использовать плагин, такой как WP REST Cop. Другие плагины, такие как Wordfence и ShieldPro, также предлагают эту функциональность.

Как работают API

Для работы API нужны два участника — клиент и сервер. Клиент делает запрос API, также известный как вызов API, на сервер, который затем обслуживает этот запрос.

Сервер определяет, как должны быть сделаны запросы API. Например, если вы хотите подключиться к API Google Maps, вам нужно будет следовать его требованиям. В этом случае вам нужно будет установить Google ‘Maps Embed API URL’ в атрибуте src или использовать Quick Builder от Google для сборки необходимого кода.

Подключитесь к API Google Карт

Структура запросов и ответов различается от одного API к другому. Таким образом, вам часто придется обращаться к документации разработчика, чтобы понять, как работает конкретный API.

Часто задаваемые вопросы

Безопасен ли WordPress REST API?

По умолчанию WordPress REST API использует аутентификацию с помощью cookie, что делает ее такой же безопасной, как вход в панель управления WordPress. Однако есть шаги, которые вы можете предпринять, чтобы сделать ее еще более безопасной. От использования сертификата TLS до ограничения скорости вызовов и внесения IP-адресов в белый список, меры по ужесточению доступа к REST API помогут вам оставаться еще более защищенными. При использовании cookie или базовой аутентификации для доступа к API вам также следует внедрить политику паролей WordPress с помощью плагина. Это гарантирует использование надежных паролей, тем самым обеспечивая максимальную безопасность доступа к WordPress и REST API.

Как защитить WordPress REST API?

Есть несколько шагов, которые вы можете предпринять для защиты WordPress REST API. Если вы используете cookie или базовую аутентификацию, установите политику паролей WordPress. Используйте сертификат TLS (SSL), чтобы гарантировать шифрование всех коммуникаций, и всегда проверяйте любые входные данные, чтобы предотвратить такие атаки, как XSS и SQL-инъекции. Другие шаги, которые вы можете предпринять, включают в себя белый список IP, ограничение частоты вызовов API и обеспечение того, чтобы все вызовы API требовали аутентификации.

Могу ли я отключить WordPress REST API?

WordPress REST API не следует отключать, так как это нарушит функциональность wp-admin. Вместо этого вам следует требовать аутентификацию для всех запросов API. Этого можно добиться, добавив соответствующий код в файл functions.php. Для получения дополнительной информации см. раздел «Требовать аутентификацию для всех запросов REST».

Какие методы аутентификации доступны для WordPress REST API?

По умолчанию WordPress использует аутентификацию cookie для доступа к WordPress REST API. Однако вы можете выбрать другой метод с помощью сторонних плагинов. Доступные варианты включают базовую аутентификацию, oAuth, JWT (JSON Web Token) и доступ по ключу API.

Оцените статью
Adblock
detector