Безопасность и CSP
Защитите встроенных агентов разрешёнными списками origin, политиками браузера и установкой без утечки учётных данных.
Защитите встроенных агентов разрешёнными списками origin, политиками браузера и установкой без утечки учётных данных.
Разрешённый список origin#
Встраивание отказывает по умолчанию, пока оно не включено и точный родительский origin браузера не разрешён. Origin — это scheme://hostname[:port]; пути и строки запроса в него не входят.
| Страница сайта | Значение для списка |
|---|---|
https://example.com/pricing | https://example.com |
https://www.example.com/help | https://www.example.com |
https://preview.example.com:8443/demo | https://preview.example.com:8443 |
http://localhost:3000 | http://localhost:3000 |
Добавляйте продакшен-, предпросмотр- и локальные origin отдельно. Не добавляйте шаблон-звёздочку ради исправления ошибки установки: иначе любой, кто скопирует публичный slug, сможет встроить агента и расходовать кредиты сайта.
Content Security Policy#
Загрузчику нужно разрешение на скрипт, виджету — на фрейм, а запросу внешнего вида загрузчика может понадобиться разрешение на соединение. Объедините эти источники с существующими директивами сайта; не заменяйте зрелую политику этим минимальным примером.
Content-Security-Policy:
default-src 'self';
script-src 'self' https://makeagent.fast;
frame-src https://makeagent.fast;
connect-src 'self' https://makeagent.fast;Если сайт использует script-src-elem, добавьте https://makeagent.fast и туда. Внешнему загрузчику не нужен unsafe-inline, но собственный фреймворк сайта может иметь отдельные требования к nonce или хешам. Политика report-only полезна во время тестирования:
Content-Security-Policy-Report-Only:
script-src 'self' https://makeagent.fast;
frame-src https://makeagent.fast;
connect-src 'self' https://makeagent.fast;Когда консоль браузера сообщает о нарушении CSP, меняйте названную директиву — а не default-src в ширину — и перепроверяйте публичную страницу.
Микрофон и разрешения браузера#
Загрузчик создаёт iframe с allow="microphone; autoplay; clipboard-write". Более строгая Permissions Policy на уровне сайта всё равно может переопределить это разрешение. Если голос включён, разрешите origin фрейма Make Agent Fast в ответе сайта:
Permissions-Policy: microphone=(self "https://makeagent.fast")Посетитель также должен выдать доступ к микрофону в браузере. Проверяйте по HTTPS; браузеры обычно ограничивают доступ к микрофону на незащищённых публичных origin. Текстовый чат не требует разрешения на микрофон.
Граница сообщений и фрейма#
Загрузчик принимает только сообщения maf:ready, maf:open, maf:close и сообщения жизненного цикла темы, связанные с текущим slug сайта. Входящие сообщения фрейма проверяются против https://makeagent.fast. Не копируйте загрузчик в собственный бандл и не удаляйте эту проверку origin.
Код страницы сайта не должен пытаться залезть в DOM iframe. Фрейм cross-origin по замыслу, и поддерживаемая поверхность интеграции — загрузчик плюс его документированные атрибуты data-*.
Секреты и идентичность посетителей#
Slug сайта и URL загрузчика публичны. Всё остальное держите вне исходного кода страницы:
- Никогда не добавляйте ключ MAF API, токен OAuth, ключ AI-провайдера, токен коннектора или секрет вебхука в сниппет.
- Никогда не встраивайте секрет в бандл JavaScript и не раскрывайте его через
NEXT_PUBLIC_*,VITE_*или похожие браузерные переменные окружения. - Используйте серверную интеграцию API, когда приложению нужно создавать сайты, обновлять агентов или получать приватные данные рабочего пространства.
- Не помещайте адреса электронной почты, ID аккаунтов и другие данные посетителей в
data-label,data-localeили параметры запроса.
Согласие, конфиденциальность и хранение#
Отнесите встраивание к категории по вашей политике конфиденциальности и согласия. Если менеджер согласия блокирует необязательные сторонние скрипты, загружайте embed.js только после нужного согласия. До этого показывайте обычную ссылку или отключённый плейсхолдер вместо обхода менеджера.
Сообщайте посетителям, когда сценарий использует ИИ, запись микрофона, сбор заявок, аналитику или внешнего провайдера сообщений — как требует ваша политика и применимый закон. Перед запуском убедитесь в процессе хранения и удаления диалогов на сайте; отключение или удаление встраивания само по себе не удаляет существующие диалоги.
Чек-лист безопасности при запуске#
- Клиентский сайт развёрнут, и его встроенный агент включён и проверен.
- Разрешены только точные, предназначенные родительские origin.
- CSP сайта разрешает скрипт, фрейм и запрос внешнего вида без широких шаблонов.
- Микрофон разрешён только если голос включён и проверен по HTTPS.
- Ни одно учётное или приватное значение посетителя не появляется в HTML, собранном бандле или логах браузера.
- Поведение менеджера согласия проверено до и после согласия.
- Скопированный сниппет не работает на origin вне разрешённого списка.