Защита от квишинга на стороне издателя. Хранение данных на стороне хранилища.
Каждая Pro-ссылка проходит через семиуровневый антиквишинговый конвейер при создании, при каждом изменении назначения и по расписанию. Лог сканирований содержит только страну и класс устройства; нет IP, нет user agent, нет кук, нет поведенческого профиля, который мог бы утечь. Однорегиональный D1 доступен на Agency и Custom Enterprise.
Данные, которые мы собираем
Каждый байт, попадающий на наши серверы, относится к одной из четырёх категорий:
Данные аккаунта
Email, тариф, статус тарифа, ID клиента + подписки Stripe, необязательное название команды + метка рабочего пространства. Всё. Нет телефона, нет адреса (платёжный адрес остаётся в Stripe), нет поведенческого профиля.
Данные кодов
URL назначения, 7-символьный Base58-шорткод, метка + теги, которые вы задаёте, необязательный дизайн QR (цвета / логотип / рамка), необязательный шлюз с паролем, необязательное расписание. Принадлежит вам; экспортируется в CSV в любой момент.
Данные сканирований
UTC-сутки + страна (из CF-IPCountry) + класс устройства (mobile / tablet / desktop / unknown). Сырой User-Agent отбрасывается сразу после классификации. IP никогда не попадает в базу данных. Кешируется в KV для критического пути редиректа, агрегируется в D1 через ctx.waitUntil. Страновые агрегаты менее 5 сканирований сворачиваются в «Other» для защиты от деанонимизации.
Метаданные аудита / биллинга
Append-only лог изменений (кто, что, когда, в каком контексте), хранение 180 дней. Stripe-события вебхуков дедублируются для идемпотентности; PII клиента не хранится сверх Stripe customer ID. Лог GDPR-запросов (экспорт / удаление / восстановление), сохраняется после удаления аккаунта как доказательство своевременного исполнения.
Полная схема, docs/SCHEMA.md в нашем репозитории; каждый столбец задокументирован с политикой хранения.
Где хранятся данные
| Поверхность | Провайдер | Регион | Однорегиональный вариант? |
|---|---|---|---|
| Dashboard + API | Cloudflare Pages Functions | Глобальный edge (ближайший PoP) | Да, только Agency+ |
| Записи кодов (D1) | Cloudflare D1 (SQLite) | Основной регион назначается при провизионировании (сейчас: ENAM) | Да, шард на тенанта для Agency+ |
| Горячий путь редиректа (KV) | Cloudflare Workers KV | Глобальная репликация на edge для <50ms p99 | Недоступно (репликация, это и есть продукт) |
| Зашифрованные резервные копии | Cloudflare R2 | Основной регион назначается при создании бакета | Да, бакет в юрисдикции EU / APAC по запросу |
| Платежи | Stripe | US, региональная обработка PII через собственный механизм резидентности Stripe | По контракту со Stripe |
| Транзакционная почта | ZeptoMail (Zoho) | IN (EU-регион Zoho доступен по запросу) | Да, EU-регион Zoho |
Что именно пересекает границу
- Сканирования не пересекают границы с потерей данных. Сканирование из Лиссабона попадает на лиссабонский PoP Cloudflare, worker записывает день/страну/устройство в KV на edge и асинхронно агрегирует в D1 в основном регионе. IP сканирующего устройства существует только в эфемерном состоянии HTTP-запроса Cloudflare и никогда не сохраняется в нашу базу данных.
- Запросы к Dashboard завершаются на ближайшем PoP Cloudflare и обращаются к D1 по внутренней сети Cloudflare. Наши Pages Functions читают/пишут D1 в назначенном регионе; edge PoP отдаёт HTML + JS-бандл из глобального кеша статических ресурсов.
- Stripe-вебхуки пересекают границу один раз: Stripe (US) делает POST на наш Cloudflare Pages endpoint, который верифицирует HMAC, записывает минимальную строку (event_id, type) для идемпотентности и отправляет события дальше.
- Транзакционная почта (Zepto) пересекает границу один раз на отправку: наш worker передаёт отрендеренный шаблон в API Zepto; Zepto доставляет на почтовый сервер получателя. Содержимое, ссылки-приглашения, уведомления о жизненном цикле биллинга и предупреждения о лимите сканирований; данные сканирований клиента не передаются.
Антиквишинговый конвейер
QR-фишинг вырос на 146% в Q1 2026. Стандартные поставщики коротких ссылок реагируют только после жалобы клиента. Мы проверяем каждую ссылку при создании, при каждом изменении назначения на нашей стороне и по расписанию, потому что клиент может перенаправить собственный URL на своём сервере, не вызывая наш API. Тот же конвейер разведки угроз, который работает в нашем публичном сканере на check.qr.abundera.ai, применяется к каждой выпускаемой нами ссылке.
Семь уровней обнаружения, каждый с поданной патентной заявкой в США. Каждый уровень формирует единый вердикт; срабатывание любого из них может заблокировать создание, отклонить изменение назначения или приостановить уже активную ссылку.
| Уровень | Что обнаруживает | Когда запускается |
|---|---|---|
| Изменяемость цепочки редиректов | Сколько независимых сторон контролируют путь между нашей короткой ссылкой и конечной страницей. Двухшаговая цепочка через чужой редиректор, иной класс риска по сравнению с прямым назначением. | Создание, изменение назначения, периодическая перепроверка |
| Мультимодальный анализ полезной нагрузки | WiFi, контакт, телефония, почта, календарь, геолокация, криптовалюта, Android Intent и inline-data каждый проходят через специализированный анализатор. Жёстко заблокированные схемы отклоняются при сабмите. | Создание, изменение назначения |
| Клоакинг сканера vs браузера | Страницы, которые показывают чистый контент сканерам и фишинг людям. Обнаруживается параллельными запросами с контролируемым разбросом fingerprint и оценкой расхождения. | Создание, периодическая перепроверка |
| Изменяемость сервера назначения | Свежезарегистрированные домены, новые сертификаты, высокооборотные TLD, отсутствие HSTS и деградация схемы транспорта. Не зависит от цепочки редиректов; статическая одношаговая цепочка к шестидневному сертификату на подозрительном TLD всё равно попадает под флаг. | Создание, изменение назначения, периодическая перепроверка |
| Провенанс физического экземпляра | Краудсорсинговый реестр хешей, ключованный по декодированной нагрузке. Единственный QR, отсканированный во многих разных регионах за короткое время, определяется как кандидат на атаку подмены наклейки. Каждая выпущенная нами ссылка получает чистую запись провенанса при создании, поэтому атаки перекрытия против легитимных Pro-кодов выявляются. | Непрерывно |
| Визуальное расхождение бренда | Если код содержит логотип бренда, чей канонический набор доменов не включает декодированное назначение, код считается бренд-расходящимся. Применяется к каждому Pro-коду с логотипом в центре; фишер не может выпустить код с логотипом Chase, указывающий на не-Chase домен. | Создание, изменение логотипа, изменение назначения |
| Топология датчиков / точек размещения | Для кодов, привязанных к точке (парковочные счётчики, регистрация в отеле, меню ресторана, экспонаты музея), RF-контекст сканирующего устройства проверяется по зарегистрированной топологии для данного места. Несоответствие возвращает аномалию контекста датчика даже при первом сканировании поддельной наклейки. Тариф Enterprise; оператор точки регистрирует ожидаемую топологию при создании кода. | Каждое сканирование |
Проблема изменений на стороне клиента
URL назначения Pro-ссылки живёт на сервере клиента, а не на нашем. Клиент может перенаправить example.com/promo с реальной акции на фишинговую страницу, не вызывая API Abundera. Мы рассматриваем это как основной вектор злоупотреблений, а не как частный случай. Периодические перепроверки активных назначений выполняются по расписанию, а уровень обнаружения клоакинга специально нацелен на страницы, которые меняются после создания. Когда назначение начинает проваливать проверки после создания, ссылка автоматически приостанавливается, владелец получает email с конкретным вердиктом, а событие фиксируется в журнале аудита.
Ложные срабатывания и апелляции
Разведка угроз иногда ошибается. Легитимный бренд на свежевыданном сертификате, реальная акция с законно изменённой страницей, перенесённый домен. Каждая блокировка и каждая автоматическая приостановка содержит конкретный сработавший уровень, входные данные, вызвавшие срабатывание, и ссылку для апелляции в один клик, которая передаёт обращение человеку в течение одного рабочего дня. Мы предпочитаем приостанавливать, а не удалять; приостановленную ссылку можно повторно активировать за секунды после одобрения апелляции.
Однорегиональное хранение (Agency+ и Custom Enterprise)
Для покупателей только из EU или только из APAC клиенты уровня Agency могут запросить:
- D1 в одной юрисдикции (EU: EEUR или WEUR; APAC: APAC). Cloudflare учитывает подсказку
locationпри создании базы данных; мы запускаем шард D1 на тенанта в запрошенном регионе (ADR-0010). - Бакет R2 в той же юрисдикции, ночные зашифрованные резервные копии D1 в R2 попадают в соответствующий регион.
- EU-регион Zepto для транзакционной почты, настраивается на уровне сервиса без изменений кода.
- KV остаётся глобальным, репликация на edge лежит в основе гарантии редиректа <50ms. Если однорегиональный KV является жёстким требованием, свяжитесь с нами; мы оценим, реализуем ли региональный вариант Worker для вашей кампании.
Цена надстройки однорегионального хранения, фиксированная (без наценки за место) и зависит от конкретной комбинации. Напишите на enterprise@abundera.ai, указав целевую юрисдикцию и прогнозируемый объём сканирований, и мы выставим счёт.
Соответствие требованиям
- GDPR, минимум данных по дизайну (только страна + класс устройства, без IP, без UA, без кук), экспорт в один клик и жёсткое удаление за 30 дней. DPA + EU SCC доступны для всех платных тарифов.
- CCPA, покрывается той же поверхностью экспорта + удаления. «Продажи данных» мы не осуществляем: нет обмена с третьими сторонами, нет рекламных партнёров, нет ретаргетинга.
- SSO + SCIM-провизионирование, единый вход SAML 2.0 + OIDC и жизненный цикл пользователей и групп SCIM 2.0 (тарифы Agency + Custom Enterprise). Соответствие RFC 7643/7644 подтверждено (20/20 на тестовом наборе на основе PingIdentity). Флаг per-connection означает, что SCIM отключён по умолчанию и включается индивидуально; ограничение 50 RPS на токен; логируется в аудит. Okta/Entra/JumpCloud работают сегодня как custom-SCIM-приложения, пока листинги в партнёрских каталогах в процессе.
- SOC 2 Type II, в стадии скоупинга. Процесс занимает 6–9 месяцев. Если это жёсткое требование, напишите на enterprise@abundera.ai; мы поделимся текущим статусом и прогнозируемыми сроками.
- PCI-DSS, вне нашей области ответственности; платежи обрабатываются end-to-end через Stripe (сертифицирован PCI Level 1).
Раскрытие уязвимостей
Нашли уязвимость? Напишите на security@abundera.ai. Координированное раскрытие: подтверждение в течение 24 ч (рабочие дни), триаж в течение 72 ч, совместное согласование сроков исправления и раскрытия. Программы bug bounty пока нет; мы публично благодарим исследователей на abundera.ai/security/thanks/ после выхода исправления.