Заметки
Безопасность чат-бота с доступом к 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.
Публичным оставляйте только один контролируемый обработчик. Конфиги, токены, классы и вспомогательные файлы храните вне публичной выдачи или закрывайте на уровне веб-сервера.