Безопасность
С ключом API можно читать каталог компании и создавать заявки от имени её сайта. Обращайтесь с ним как с паролем.
Ключ — только на сервере
- Храните ключ в переменных окружения сервера (
TYPE_API_KEY), а не в коде. - Никогда — в браузере: ни в клиентских компонентах, ни в переменных
NEXT_PUBLIC_*/VITE_*, ни в HTML и JS страницы. CRM всё равно не отвечает браузеру (нет CORS), а пакет@type/site-clientпри импорте в браузерную сборку бросает ошибку. - Никогда — в репозитории: добавьте
.env*в.gitignore; в README и примерах — только заглушки видаtk_<key_id>_<secret>. Ключи начинаются сtk_— это помогает сканерам секретов находить утечки. - Не пишите в логи ключ и заголовок
Authorization. Пакет не включает ключ в сообщения ошибок. - Ключ — только в заголовке. В адресе, cookie или теле CRM его отклоняет (
400 api_key_misplaced): такие места оседают в логах прокси и истории браузера.
Минимум прав
- Дайте ключу сайта только право «Аренда: сайт» (
rental:site). Лишние права (leads:write,deals:read…) увеличивают ущерб при утечке. - Задайте срок действия (рекомендуем год) и, если у сервера постоянный IP, список разрешённых IP.
- Один ключ — один сайт. Для тестового стенда заведите отдельный ключ.
Если ключ утёк
- В CRM: Настройки → Интеграции → API → ключ → «Отозвать». Ключ перестаёт работать сразу.
- Создайте новый ключ (или «Перевыпустить» с немедленным отзывом старого секрета) и обновите
TYPE_API_KEYна сервере. - Посмотрите в списке ключей последнее использование (время, IP, маршрут) — было ли что-то необычное.
- Если ключ попал в репозиторий — удалить коммит недостаточно: ключ уже скомпрометирован, его нужно отозвать.
Вебхук
- Всегда проверяйте подпись (
X-Type-Signature) и время (X-Type-Timestamp, окно 300 с), прежде чем что-то делать. Иначе кто угодно сможет сбрасывать кэш сайта. Как — в разделе «Вебхуки». - Сравнивайте подпись за постоянное время.
- Храните секрет вебхука так же, как ключ, — в переменной окружения сервера.
- Если секрет утёк — «Новый секрет» в Настройки → Аренда → Сайт; старый сразу перестаёт работать.
Данные посетителей
- Форма брони передаёт в CRM имя, телефон, e-mail и сообщение гостя. Отправляйте их только по HTTPS со своего сервера и не храните на сайте дольше, чем нужно для повтора заявки.
- Поле
consent— согласие посетителя на обработку данных: передавайтеtrue, только если посетитель его действительно дал. - Ответы
occupancy()не содержат гостей и сумм — только занятые интервалы.