Безопасность AdWitch AI
Как AdWitch защищает ваши рекламные кабинеты Meta и данные: шифрование токенов, какие именно разрешения Meta мы запрашиваем, изоляция команд, субпроцессоры, хранение и удаление, как сообщить об уязвимости.
Последнее обновление:
AdWitch работает в ваших рекламных кабинетах Meta с теми правами, которые вы ему выдали. Поэтому обращение с токенами доступа и данными кабинетов — ядро продукта, а не побочный вопрос. На этой странице описаны только те механизмы, которые реально работают в платформе сегодня, без обещаний «на будущее». Когда механизм меняется, вместе с ним меняется эта страница и журнал изменений.
Токены доступа и секреты
- Токены доступа Meta шифруются при хранении алгоритмом AES-256-GCM (случайный IV, тег аутентичности) до записи в базу данных. Ключ шифрования выводится из секрета, который существует только в окружении приложения — отдельно от базы и её резервных копий; дамп базы сам по себе токены не раскрывает.
- Токены никогда не показываются обратно ни в интерфейсе, ни в API после подключения — только их состояние (действителен, истекает, какие разрешения содержит).
- Каждый вызов Meta Graph API подписывается
appsecret_proof, поэтому утёкший токен нельзя использовать вне наших серверов. Кабинеты подключаются только через Facebook Login for Business с приложением AdWitch: каждый токен выдаёт Meta нашему приложению, а при подключении он проверяется черезdebug_token— фиксируются приложение, валидность, тип, срок действия и разрешения. Вставленные или импортированные токены мы не принимаем. - Пароли хранятся в виде bcrypt-хэшей. Для любого аккаунта доступна двухфакторная аутентификация (TOTP, 6 цифр / 30 секунд); секрет TOTP хранится зашифрованным по той же схеме, что и токены.
- Сброс пароля отзывает все существующие сессии аккаунта. Отдельные сессии также могут быть отозваны на стороне сервера.
Что мы запрашиваем у Meta и зачем
При подключении через «Continue with Facebook» AdWitch запрашивает эти разрешения и никакие другие:
| Разрешение | Для чего |
|---|---|
ads_read | Чтение кампаний, групп, объявлений, статистики и статуса доставки — для отчётов, мониторинга и анализа агентом. |
ads_management | Создание и правка кампаний, бюджетов, аудиторий, креативов и автоматических правил — когда вы просите агента или когда автопилот переведён в режим с правом действовать. |
business_management | Список Business Manager и рекламных кабинетов, к которым у вас есть доступ, чтобы выбрать, какие подключить. |
pages_show_list, pages_read_engagement | Список Страниц (и связанных Instagram-аккаунтов), от имени которых можно публиковать объявления, и чтение комментариев для модерации. |
pages_manage_ads | Публикация объявлений от имени Страницы, которой вы управляете. |
public_profile | Идентификация пользователя Facebook, выполнившего подключение (нужна, чтобы обрабатывать колбэки Meta об отзыве доступа и удалении данных). |
Для работы только на чтение (отчёты, мониторинг) достаточно ads_read; платформа фиксирует, какие разрешения реально есть у токена, и отказывает в действиях на запись при отсутствии ads_management — вместо того чтобы падать на полпути.
Изоляция команд и роли
- Каждый рекламный кабинет, кампания, креатив, диалог и файл принадлежит ровно одной команде. Каждый запрос к базе данных в API ограничен командой текущей сессии; межкомандных эндпоинтов нет.
- Роли внутри команды: Owner, Admin, Manager, Analyst и Viewer. Подключение кабинетов, настройки автопилота и биллинг доступны только старшим ролям; Viewer и Analyst не могут ничего изменить в Meta.
- Сгенерированные креативы и медиавложения хранятся в Cloudflare R2. Постоянные ссылки обслуживаются API с проверкой доступа команды; временные подписанные ссылки предоставляют доступ браузеру и провайдерам. Файлы, загруженные до переезда, копируются из CDN Bunny.net в R2; зона Bunny удаляется, как только копия проверена.
- Сотрудники AdWitch могут заглянуть в рабочее пространство клиента только через явную сессию поддержки, которая помечена в каждом запросе; таким сессиям закрыт доступ к административным функциям.
Защита приложения и сети
- Весь трафик идёт по HTTPS. API отдаёт строгие заголовки безопасности (HSTS, Content-Security-Policy, защита от встраивания во фреймы).
- Изменяющие запросы защищены от CSRF: API требует same-site-запрос или разрешённый origin.
- Вход, регистрация, AI-эндпоинты и API в целом ограничены по частоте запросов на клиента.
- Исходящие запросы, инициированные пользовательским вводом (загрузка картинки по URL, адрес вебхука), проходят через SSRF-безопасный клиент: DNS резолвится один раз, приватные и link-local диапазоны отклоняются, проверенный адрес закрепляется, каждый редирект проверяется заново.
- Входящие вебхуки аутентифицируются до любой обработки: доставки Meta и Stripe проверяются по подписи (колбэки Meta дополнительно проверяются на свежесть и повтор); Higgsfield подпись не присылает, поэтому его URL колбэка содержит секретный токен, производный от секрета нашего приложения, и любой запрос без верного токена отклоняется.
- Действия чат-агента на запись в Meta проходят через серверный шлюз подтверждения: аргументы инструмента валидируются на сервере, а действие выполняется только после вашего подтверждения в диалоге — на каждый ход и на каждый инструмент.
Субпроцессоры
Мы передаём данные следующим провайдерам — только в объёме, нужном для используемой вами функции:
| Провайдер | Назначение | Какие данные |
|---|---|---|
| Meta Platforms | Сама рекламная платформа | Всё, что вы просите агента прочитать или изменить в кабинетах |
| Anthropic | Языковая модель агента | Текст диалога, метрики кампаний и тексты креативов, включённые в диалог |
| Higgsfield | Генерация изображений и видео | Промпты и референсы, которые вы даёте для креативов |
| Cloudflare R2 | Хранилище сгенерированных и загруженных медиа | Файлы креативов |
| Bunny.net | Медиа, загруженные до переезда в R2 (выводится из работы) | Файлы креативов |
| Stripe | Оплата картой | Платёжные данные (обрабатывает провайдер; AdWitch не хранит номера карт) |
| Resend | Транзакционная почта | E-mail, коды подтверждения, уведомления |
| Telegram | Уведомления и бот поддержки (по желанию) | Telegram user id и сообщения, которые вы решили получать |
База данных приложения и кэш работают на серверах, которыми мы управляем сами; они не делятся с нагрузками других арендаторов.
Хранение и удаление
- Колбэки Meta обрабатываются автоматически. Когда вы удаляете AdWitch в настройках Facebook (отзыв доступа) или отправляете запрос на удаление данных через Meta, платформа отзывает сохранённые токены и отключает все подключения кабинетов, сделанные этим пользователем Facebook, во всех командах. Запрос на удаление получает код подтверждения и страницу статуса; записи статуса хранятся 90 дней.
- Удаление аккаунта и рабочего пространства выполняется по политике удаления данных: запрос на privacy@adwitch.ai исполняется в течение 30 дней и удаляет данные профиля, настройки кабинетов и токены, историю кампаний и креативов, аналитику, сессии и файлы базы знаний.
- Удаление рекламного кабинета внутри приложения немедленно удаляет запись о подключении вместе с сохранённым токеном.
- Платёжные записи хранятся столько, сколько требует налоговое и бухгалтерское законодательство, без данных карт.
Ответственное раскрытие
Если вы считаете, что нашли уязвимость в AdWitch, напишите на security@adwitch.ai с шагами воспроизведения. Тот же контакт опубликован в /.well-known/security.txt.
- Мы подтверждаем получение в течение 3 рабочих дней и держим вас в курсе до устранения.
- Пожалуйста, дайте нам разумное время на исправление до публичного раскрытия, не обращайтесь к чужим данным, не запускайте автоматические сканеры против продакшена и не нарушайте работу сервиса.
- Мы не будем преследовать юридически исследователей, которые добросовестно следуют этим правилам. Платной bug-bounty-программы сейчас нет; по желанию указываем автора находки в журнале изменений.
Сертификаций соответствия (SOC 2, ISO 27001) на данный момент нет; о любом аудите мы объявим на этой странице.
Вопросы по этой странице: security@adwitch.ai. URL политики: https://adwitch.ai/security