Безопасность

Наша модель безопасности в одном предложении: на сервере нечего атаковать. Всё нижесказанное можно проверить через DevTools вашего браузера.

Архитектура

Abundera QR, это статическое одностраничное приложение, раздаваемое с Cloudflare Pages. Здесь нет сервера приложений, базы данных, учётных записей пользователей, аутентификации, API-эндпоинтов и кода бэкенда, обрабатывающего данные пользователей. Каждая операция генерации QR, кодирования, сканирования и рендеринга выполняется полностью в вашем браузере.

Модель угроз

Поскольку мы не собираем, не храним и не передаём никаких пользовательских данных, наиболее распространённые угрозы для веб-приложений, кража учётных данных, утечка базы данных, перехват сессий, серверные инъекции, к нам неприменимы. Оставшаяся поверхность атаки, это пакет статических ресурсов (HTML, CSS, JavaScript), раздаваемый с нашего источника. При проектировании мы исходим из следующего:

Content Security Policy, по директивам

Действующая политика (можно проверить в заголовках ответа на любой запрос):

Content-Security-Policy:
  default-src 'self';
  script-src 'self' 'wasm-unsafe-eval';
  worker-src 'self' blob:;
  style-src 'self' 'unsafe-inline';
  font-src 'self';
  img-src 'self' data: blob: https:;
  connect-src 'self' https:;
  frame-ancestors 'none';
  base-uri 'self';
  form-action 'self'

Что разрешает каждая директива и где она идёт на компромисс:

К /bio/* (ослабленный img-src для аватаров от пользователей) и /embed/* (ослабленный frame-ancestors для намеренного встраивания) применяются отдельные политики CSP. Обе задокументированы в site/_headers.

Заголовки транспорта и фреймирования

Сервис-воркер

Наш сервис-воркер (site/sw.js) кэширует только ресурсы из того же источника. Обработчик fetch явно отклоняет кросс-доменные запросы и методы, отличные от GET, логику можно прочитать на GitHub. Запись в кэш обёрнута в event.waitUntil(), поэтому она не может быть прервана в процессе навигации.

Санитизация входных данных

Каждый путь рендеринга, принимающий пользовательский ввод, обрабатывает его как ненадёжный текст:

Загрузка изображений с внешних ресурсов

Когда пользователь вставляет URL вида https: в качестве фотографии vCard или логотипа, браузер загружает его с учётом CORS и списка разрешений img-src нашего CSP. Изображение отрисовывается на canvas. Оно никогда не становится живым DOM, не выполняется как код и не достигает нашего источника, запрос идёт от браузера к удалённому изображению, а результат отображается на стороне клиента. Злоумышленник, контролирующий URL удалённого изображения, может отследить факт загрузки URL (строка в логе собственного сервера), но не способен извлечь что-либо с нашей страницы.

Subresource Integrity (SRI)

Весь JavaScript и CSS, который мы поставляем, является одноисточниковым. Мы не загружаем сторонние скрипты или таблицы стилей, поэтому SRI-хэши не применимы. Если мы когда-либо загрузим сторонний ресурс, мы добавим к нему атрибут SRI integrity и задокументируем процесс обновления хэша на этой странице.

Сообщение об уязвимости

Если вы обнаружили проблему безопасности, затрагивающую Abundera QR, в нашем коде, развёртывании или используемых зависимостях, пожалуйста, сообщите об этом конфиденциально по адресу security@abundera.ai. Наша цель, провести оценку в течение 72 часов. Вы также можете связаться с нами через контактные данные в файле /.well-known/security.txt.

Программы вознаграждений пока нет

В настоящее время мы не предлагаем денежных вознаграждений, но каждый подтверждённый действительный отчёт получает упоминание в журнале изменений и нашу публичную благодарность.

Проверьте всё вышесказанное

Каждое утверждение на этой странице можно проверить через DevTools браузера, не доверяя нам на слово:

Контакты

Сообщения об уязвимостях: security@abundera.ai

Последнее обновление: 2026-04-19. Следующий пересмотр: 2026-07-19.