Переменные среды против базы данных: обеспечение безопасности Connectors API

С выходом WordPress 7.0 платформа претерпела одну из самых значительных архитектурных эволюций за последние годы. Ядро ​​теперь включает стандартизированный нативный инфраструктурный слой для подключения возможностей ИИ.

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

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

Централизованные секреты

До WordPress 7.0 для сайтов, использующих три разных ИИ-плагина, требовалось вставлять API-ключи в три совершенно разных раздела настроек. Этот метод приводил к фрагментированному хранению учетных данных, ограничениям скорости запросов и непредсказуемым рискам безопасности.

В WordPress 7.0 эта проблема решена за счет отделения основной инфраструктуры от конкретных провайдеров услуг:

  • Основная инфраструктура: ядро ​​WordPress теперь предоставляет единый уровень реестра и собственные API-эндпоинты.
  • Сопутствующие плагины: подключение отдельных сервисов (таких как OpenAI, Anthropic или Gemini) осуществляется с помощью официальных сопутствующих плагинов, которые регистрируются в экосистеме ядра.

В результате мы имеем централизованный хаб, расположенный в разделе Settings → Connectors. Хотя такое объединение обеспечивает удобную настройку, это означает, что теперь единая точка доступа содержит ключи ко всей вашей внешней экосистеме приложений.

Понимание иерархии аутентификации

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

  1. Переменные окружения (наивысший приоритет).
  2. Константы PHP (например, define( ‘OPENAI_API_KEY’, ‘sk-…’ ); внутри wp-config.php).
  3. Параметры базы данных (значения, передаваемые через Settings → Connectors UI).

[System Request] 
       │
       ▼
 1. Environment Variables ───► Key Found? ───► [Authenticate]
       │ (Bypasses DB)
       ▼ Key Empty
 2. PHP Constants         ───► Key Found? ───► [Authenticate]
       │
       ▼ Key Empty
 3. Database Storage      ───► Pulls Plain Text from wp_options


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

«Замаскированы» не значит «защищены»

Если вы введете API-ключ в административную панель WordPress, экран корректно скроет символы, замаскировав их буллетами или звездочками. Однако маскировка не означает шифрование.

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

  • SQL-инъекции (SQLi). Если дырявый плагин откроет доступ к какой-либо части вашего сайта через SQL-инъекции, злоумышленник сможет прочитать содержимое таблицы wp_options и извлечь ваши API-ключи.
  • Уязвимости при экспорте БД. Несанкционированные дампы базы данных, плохо защищенные среды тестирования или незашифрованные бэкапы, оставленные в публичных директориях, немедленно поставят под угрозу ваши внешние платежные аккаунты.

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

Очистка и синхронизация базы данных с помощью WP Migrate

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

Connectors API использует стандартизированную схему именования для опций, хранящихся в базе данных:

connectors_{$provider_type}_{$provider_id}_api_key

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

Сохранение границ среды

При переносе или извлечении БД с помощью WP Migrate необходимо предотвратить миграцию конфиденциальных учетных данных между средами. Используйте фильтр wpmdb_preserved_options, чтобы гарантировать, что локальные или staging переменные никогда не будут перезаписаны при извлечении данных из БД в продакшне:


add_filter( 'wpmdb_preserved_options', function( $options ) {
    $options[] = 'connectors_openai_openai_api_key';
    $options[] = 'connectors_anthropic_anthropic_api_key';
    return $options;
});


 

Санитизация БД

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

Источник: https://deliciousbrains.com/

Дмитрий/ автор статьи
CCO, Senior SEM/PPC Specialist, WordPress-энтузиаст, переводчик с английского и немецкого. Серый кардинал русскоязычного WP-комьюнити.
Блог про WordPress
Добавить комментарий

Получать новые комментарии по электронной почте.