Обсудить проект

Безопасность данных

Клиенты спрашивают честную вещь: приложение из магазина кто-то проверил, а ваше открывается в браузере — кто проверял его? Отвечаем подробно, и главное — показываем, как проверить самому, не веря нам на слово.

Смартфон с документом внутри стеклянного куба: линия наружу обрывается на грани, документ снаружи остаётся недоступным

Магазин проверяет один раз, а браузер ограничивает постоянно

Проверка в магазине приложений — это сканирование сборки при публикации и выборочный просмотр кода. Она полезна, но касается одного момента времени, а не всей жизни приложения на вашем телефоне. Приложения с вредоносным кодом попадают в магазины регулярно, и новости об их удалении выходят каждые несколько месяцев.

Разница не в проверке, а в правах. Установленное приложение получает доступ к файлам, контактам, камере и работает в фоне; после установки вы не видите, что оно делает. Приложение, открытое в браузере, работает в песочнице: ему доступно только то, что вы дали сами, и только пока открыта вкладка.

Проверить приложение на вирусы: что проверяет магазин — разбор в блоге, с проверками по шагам.

Обсудить проект →

Что запрещено нашим приложениям на уровне браузера

Эти правила отдаёт сервер вместе с каждой страницей приложения. Их выполняет браузер, а не наша добросовестность, — и увидеть их может кто угодно в инструментах разработчика. Они одинаковы у сканера документов и у заполнения документов.

  • connect-src 'none'

    Приложение не может ничего отправить

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

  • script-src 'self'

    Чужого кода нет

    Загружается только код с нашего адреса. Сторонний скрипт — самый частый способ, которым в приложение попадает то, чего там быть не должно: разработчик подключил чужую библиотеку, а она однажды обновилась.

  • camera=(self), microphone=(), geolocation=()

    Микрофон и геолокация выключены совсем

    Камера доступна только по вашему нажатию и только самому приложению. Микрофон и определение места запрещены на уровне заголовка: даже если бы код попытался их запросить, браузер откажет.

  • frame-ancestors 'none'

    Приложение нельзя встроить в чужую страницу

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

  • Strict-Transport-Security

    Только по защищённому соединению

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

  • X-Content-Type-Options: nosniff

    Файл не подменить типом

    Браузер берёт тип файла из заголовка, а не угадывает по содержимому. Угадывание — старая лазейка, через которую картинку заставляли выполниться как код.

Обсудить проект →

Как проверить самому

  1. 01

    Режим полёта — одна минута

    Откройте приложение с интернетом, включите режим полёта и поработайте: отсканируйте документ, соберите PDF, заполните бланк. Всё сработает, потому что файлу и не нужно никуда уходить. Сервис, который обрабатывает данные у себя, в этот момент просто перестанет работать — разницу видно сразу и без специалиста.

  2. 02

    Инструменты разработчика — для тех, кто хочет глубже

    Нажмите F12, вкладка «Сеть». Поработайте в приложении и посмотрите, уходит ли хоть один запрос. Там же, во вкладке заголовков ответа, видны все правила из таблицы выше — их выдаёт наш сервер, и подделать их в браузере нельзя.

  3. 03

    Независимая оценка — мнение не наше

    Сервис securityheaders.com проверяет заголовки со своей стороны и ставит оценку. У сканера документов — высшая, A+, все шесть проверяемых заголовков на месте (проверка 15.09.2026). Повторите её сами: адрес приложения подставляется в строку на сайте сервиса, результат считается заново в момент запроса. Мы на него повлиять не можем — в этом и смысл.

Обсудить проект →

Чего мы не делаем

  • Счётчиков посещаемости внутри приложений нет: счётчик — это тоже отправка данных, а она запрещена. Сколько раз открывали приложение, мы видим по журналу своего сервера, как любой сайт видит визиты. Что вы в нём делали — не видим никак.
  • Документы мы не храним. Файл живёт на вашем устройстве, пока вы с ним работаете, и сохраняется туда, куда вы сами его отправите.
  • Рекламных сетей нет. Им нужны данные о вас, а отдать их приложение не может — см. первое правило в таблице.
  • Один обмен с сервером всё же есть, и мы говорим о нём прямо: распознавание текста при первом запуске скачивает языковые данные, около 12 МБ, с нашего же адреса. Скачивание идёт в одну сторону — принять ваш файл там нечему.
Обсудить проект →

Частые вопросы

  1. 01

    В Google Play и App Store приложения проверяют. Кто проверял ваши?

    Магазины сканируют сборку при публикации и выборочно смотрят код. Это полезно, но проверяется момент публикации, а не то, что приложение делает у вас на телефоне через месяц: новости об удалении из магазинов десятков приложений с вредоносным кодом выходят регулярно. У веб-приложения ограничения работают постоянно: браузер не спрашивает, что мы обещали, — он не даёт отправить данные, потому что это запрещено заголовком.

  2. 02

    Установленное приложение и открытое в браузере — в чём разница по правам?

    Установленное получает доступ к файлам, контактам, камере, работает в фоне, и после установки вы не видите, что оно делает. Приложение в браузере живёт в песочнице: доступ только к тому, что вы дали сами, и только пока открыта вкладка. Закрыли — оно перестало существовать.

  3. 03

    Я поставил иконку на экран. Это ведь уже не браузер — правила ещё действуют?

    Действуют, и это главное свойство таких приложений. Иконка на рабочем столе или в меню телефона запускает то же самое приложение в том же движке браузера: на Android это Chrome или Яндекс Браузер, на iPhone — WebKit, на компьютере — тот браузер, из которого вы его поставили. Адресной строки и вкладок не видно, но ограничения на месте: запрет отправки данных, выключенные микрофон и геолокация, камера по нажатию. Проверяется так же — режимом полёта.

  4. 04

    Права мобильному приложению тоже можно отозвать. В чём тогда разница?

    Отозвать можно, вы правы: и Android, и iOS позволяют выдавать права по запросу и отбирать их в настройках. Разница в другом. Во-первых, пока право выдано, приложение пользуется им в фоне, и вы не видите, что именно оно делает. Во-вторых, отправку данных в мобильном приложении не запретить в принципе — это его обычная работа, и решение о ней принимает разработчик. У веб-приложения такого права нет вовсе: connect-src — не разрешение, которое можно выдать, а запрет, который вы можете увидеть в браузере.

  5. 05

    А если вы измените код и начнёте собирать данные?

    Заголовки отдаёт сервер, и их видно в браузере в любой момент — это не то, что можно поменять тихо. Как только connect-src перестанет быть none, это станет заметно на вкладке «Сеть» у любого, кто откроет инструменты разработчика. Поэтому мы и строим объяснение на проверяемом правиле, а не на обещании.

  6. 06

    Приложение обновляется само. Что мешает подсунуть в обновление что угодно?

    Ровно то же самое: новая версия работает под теми же заголовками, и они проверяются так же. Плюс обновление приходит с нашего адреса по защищённому соединению — подменить его по дороге нельзя.

  7. 07

    Мы компания, у нас 152-ФЗ. Это решает наши вопросы?

    Частично, и мы не будем говорить, что полностью. Если документ не покидает устройство сотрудника, передачи персональных данных третьему лицу не происходит — а именно она требует основания и договора поручения. Но обязанности оператора этим не исчерпываются: политика, уведомление, сроки хранения остаются на вас. Конкретный состав сверяйте с юристом.

  8. 08

    Нашли уязвимость — куда писать?

    На security@businessaxis.ru. Контакт продублирован в файле /.well-known/security.txt — это стандарт RFC 9116, по которому исследователи ищут, кому сообщить о находке. Отвечаем и разбираем каждое сообщение.

Остались вопросы по безопасности или нужна система с такими же правилами?

Обсудить проект