Перейти к основному содержанию
Блог

Процесс

Чек-лист перед подачей на экспертизу: 20 пунктов для веба и мобильных приложений

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

· 9 мин. чтения

Фото: RyanT27, CC0 · Wikimedia Commons

С момента подачи заявки на экспертизу каждая находка требует времени: исправление, новая сборка, повторная подача. Поэтому основную работу лучше сделать заранее. Приведённые ниже 20 пунктов собраны из опыта прохождения экспертизы нашим собственным продуктом — налогово-финансовой SaaS-платформой и её мобильным приложением на Flutter — и из стандартов OWASP (Top 10, ASVS, MASVS, Mobile Top 10 2024). Список не заменяет полный аудит, но помогает заранее закрыть самые частые проблемы.

Веб-приложение и сервер (1–10)

1. HTTPS и HSTS

Все страницы открываются только по HTTPS, запросы по http перенаправляются кодом 301. Цепочка сертификатов полная, устаревшие версии TLS отключены.

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

2. Заголовки безопасности

Content-Security-Policy, X-Content-Type-Options: nosniff, X-Frame-Options (или frame-ancestors в CSP), Referrer-Policy, Permissions-Policy. Уберите заголовки, раскрывающие версию сервера и фреймворка.

3. Режим отладки выключен

APP_DEBUG=false или аналог в вашем фреймворке. Страницы ошибок не показывают стек вызовов, SQL-запросы и пути к файлам. phpinfo, Telescope и подобные панели закрыты.

4. Открытые порты

Просканируйте сервер снаружи (nmap -Pn site.uz). Из интернета должны быть открыты только 80 и 443. В нашей экспертизе находкой стали открытые порты FTP и панели управления. Исправление: firewall, отключение неиспользуемых сервисов, панель за IP allowlist. Вход по SSH — по ключу и с ограниченных адресов.

5. Прокси-заголовки и Host

Приложение не доверяет X-Forwarded-Host. Только X-Forwarded-For/Proto/Port и только от вашего прокси. В production базовый URL задан принудительно — иначе ссылки сброса пароля могут формироваться с поддельным доменом.

6. Раскрытие информации

В браузер не передаются полный список маршрутов (например, через Ziggy), внутренние ID, данные других пользователей или лишние поля. Просмотрите ответы API: полей, которые не использует фронтенд, в ответе быть не должно. .env, .git, storage/logs, архивы резервных копий не открываются из браузера.

7. Аутентификация и rate limit

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

8. Авторизация

Для каждого ресурса проверяется владение: изменив ID, нельзя открыть чужой документ, платёж или профиль. Административные функции не вызываются токеном обычного пользователя.

9. Бизнес-логика

Статус платежа меняется только по серверному подтверждению провайдера — страница «успешно» показывает реальный статус из базы. Каждый переход состояния (например, отправка или утверждение заявки) проверяет текущее состояние на сервере. Оба случая были находками в нашей веб-экспертизе.

10. Зависимости и загрузка файлов

composer audit, npm audit или аналогичные инструменты не показывают известных уязвимостей. Загружаемые файлы проверяются по типу и размеру и не исполняются как код.

Мобильное приложение (11–18)

11. Обнаружение root и jailbreak

Приложение распознаёт Android с root и iOS с jailbreak и ограничивает работу. В нашей экспертизе это было находкой высокого уровня на обеих платформах (MASWE-0097, OWASP Mobile M7).

12. Обнаружение эмулятора, отладчика и хуков

Обнаруживаются инструменты динамического анализа вроде Frida, подключение отладчика и запуск в эмуляторе. Мы закрыли это с помощью RASP-библиотеки (freeRASP): при обнаружении угрозы приложение показывает блокирующий экран.

13. Проверка целостности

Приложение распознаёт переподписание или модификацию (tamper detection). Хеш сертификата подписи сравнивается с ожидаемым значением.

14. Проверка сертификата и pinning

Нет badCertificateCallback или кода «доверять всем сертификатам». Сертификат закреплён за конкретными корневыми CA: в Dart — SecurityContext только с доверенными корнями, в Android — pin-set в network_security_config.

15. Безопасное хранение данных

Токены и персональные данные хранятся не в открытом виде в SharedPreferences или UserDefaults, а через flutter_secure_storage (Keystore/Keychain). При выходе очищаются данные WebView и кеш.

16. Обфускация

В Android включена минификация R8, сборка Flutter выполнена с --obfuscate --split-debug-info. Endpoint'ы и несекретная конфигурация тоже не хранятся открытыми строками. Серверных секретов в приложении нет вовсе.

17. Резервное копирование и экспорт

В AndroidManifest.xml:

<application
    android:allowBackup="false"
    android:dataExtractionRules="@xml/data_extraction_rules"
    android:usesCleartextTraffic="false" ...>

Так данные приложения не переносятся через резервную копию на другое устройство.

18. Нет незашифрованного трафика

Все запросы и ссылки внутри приложения — https. Cleartext-трафик в Android отключён, в iOS исключения ATS не добавлены без обоснования. В нашей экспертизе ссылки http были зафиксированы как находка низкого уровня.

Подача (19–20)

19. Контрольные суммы и та же самая сборка

Экспертиза запрашивает контрольные суммы MD5, SHA1 и SHA256 поданного APK/IPA:

sha256sum app-release.apk
md5sum app-release.apk
sha1sum app-release.apk

Суммы снимаются именно с поданного файла. После исправлений — новая сборка и новые суммы.

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

20. Документы и тестовый доступ

Для экспертов подготовлены тестовые аккаунты (с разными ролями), описание системы, список открытых URL и API. При повторной подаче — ответный документ по каждой находке: что изменено и как проверено.

Как пользоваться списком

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

Вывод

20 пунктов — это краткая карта того, на что смотрит экспертиза. Закрыв их заранее, вы сокращаете циклы подачи и повторной подачи и даёте команде понятный план работ.

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