← Назад к заметкам

Заметки

Безопасность чат-бота с доступом к HL-блокам и инфоблокам

Как безопасно делать чат-бота с доступом к HL-блокам и инфоблокам: аутентификация, scopes и закрытие прямого доступа.

Если бот умеет читать HL-блоки и инфоблоки, его обработчик нельзя оставлять открытым как обычный публичный PHP-файл. Сначала проверка источника запроса и прав, потом работа с данными.

Риск

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

Если endpoint бота принимает произвольные параметры и сразу читает HL-блок, любой, кто узнал URL, может попытаться вытащить данные.

Аутентификация запроса

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

$token = $_SERVER['HTTP_X_BOT_TOKEN'] ?? '';

if (!hash_equals($expected_token, $token)) {
    http_response_code(403);
    exit;
}

Конкретная схема зависит от источника: REST-событие, Telegram webhook, свой frontend или внутренний ajax.

Ограничение действий

Даже авторизованный бот не должен выполнять всё подряд.

Лучше делать белый список команд: какие HL-блоки можно читать, какие поля возвращать, какие операции запрещены. Не передавайте ID HL-блока напрямую из внешнего запроса без проверки.

Закрытие прямого доступа

Служебные классы и конфиги не должны открываться по URL.

Публичным оставляйте только один контролируемый обработчик. Конфиги, токены, классы и вспомогательные файлы храните вне публичной выдачи или закрывайте на уровне веб-сервера.