Спойлер: оба, но по-разному - и это важно понимать.

Каждый раз, когда слышим «у нас все нормально с безопасностью, мы же не банк», что-то внутри сжимается. За этой фразой обычно стоят токены аутентификации в SharedPreferences, SQL-запросы без параметризации и Firebase без правил доступа. Эта статья - попытка честно сравнить два мира, найти точки пересечения и разобраться, почему одни проблемы одинаковые, а другие - принципиально разные.

Исходные данные: OWASP Top 10 Web 2025, OWASP Mobile Top 10 2024, статистика NVD/CVE-базы, данные реальных пентестов, IBM Cost of a Data Breach 2024.

Масштаб проблемы: цифры, которые отрезвляют

По данным OWASP и NVD за последние годы картина не меняется кардинально - меняются только детали.

Инъекции стабильно лидируют по числу CVE среди всех веб-категорий. Проблема существует с 90-х годов, описана в каждом учебнике по безопасности - и все равно встречается в production-приложениях ежедневно.

Сбои аутентификации - credential stuffing, session fixation, отсутствие MFA на критичных операциях. По данным OWASP, уязвимости аутентификации встречаются в десятках тысяч приложений ежегодно.

Криптографические ошибки - MD5 для паролей, ключи в коде, TLS 1.0 на продакшене. Причем правильные решения существуют и хорошо задокументированы уже много лет.

Нарушения контроля доступа (веб) - по данным OWASP, выявляются в более чем 90% протестированных приложений. Именно поэтому эта категория занимает первое место в Web Top 10 третий рейтинг подряд.

По мобильным приложениям картина не радостнее. Исследования в рамках OWASP Mobile Security Testing Guide показывают:

  • Большинство мобильных приложений содержат хотя бы одну уязвимость из Mobile Top 10 

  • Небезопасное хранение данных (токены в незащищенных хранилищах, незашифрованные базы) - одна из самых частых находок при аудитах. 

  • При статическом анализе APK захардкоженные API-ключи обнаруживаются значительно чаще, чем хотелось бы думать.

Последствия реальные: утечки персональных данных, финансовые потери, регуляторные штрафы (152-ФЗ, GDPR). По данным IBM Cost of a Data Breach 2024, средняя стоимость утечки данных составила 4,88 миллиона долларов, а среднее время обнаружения и сдерживания взлома - около 194 дней. И это без учета репутационного ущерба.

OWASP Top 10: детальное сравнение

Прежде чем идти в детали, посмотрим на оба списка рядом и сразу найдем общее.

OWASP Top 10: сравнение
OWASP Top 10: сравнение

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

В вебе уникальные угрозы сосредоточены вокруг серверной логики и наблюдаемости: ненадежный дизайн означает, что архитектурные просчеты закладываются еще на этапе проектирования бизнес-процессов и не поддаются патчингу без переписывания; сбои целостности ПО и данных бьют по CI/CD-пайплайнам и механизмам автообновления; а отсутствие нормального логирования и мониторинга делает атаку невидимой - злоумышленник может месяцами находиться внутри периметра, пока никто не смотрит в логи. Неправильная обработка исключений довершает картину: стектрейсы и внутренние сообщения об ошибках утекают в браузер, давая атакующему карту внутренней инфраструктуры.

В мобилке угрозы смещаются в сторону самого устройства и экосистемы приложения: небезопасное взаимодействие через незащищенные IPC-каналы, deep links и межпроцессные интенты открывает атаки, которых в вебе просто не существует; недостаточная защита бинарного кода позволяет реверс-инжинирить приложение, извлекать захардкоженные ключи и переупаковывать APK с вредоносной начинкой; недостаточный контроль конфиденциальности отражает специфику мобильных разрешений - геолокация, камера, контакты утекают через сторонние SDK незаметно для пользователя. Все это проблемы, которые веб-разработчик даже не рассматривает как вектор угрозы.

Архитектура определяет угрозы

Почему списки различаются - понятнее становится, когда смотришь на архитектуру.

Ключевой вывод из схемы: в вебе злоумышленник атакует сервер, используя браузер как инструмент. В мобилке злоумышленник может атаковать само приложение - скачать, декомпилировать, модифицировать, запустить на рутованном устройстве с перехватом трафика.

При этом бэкенд общий - и мобильные, и веб-клиенты работают с одним API. Уязвимость на сервере опасна для обоих.

Общие уязвимости: где риски одинаковы

1. Аутентификация и авторизация

Это самый большой пласт проблем, одинаково актуальный для обеих платформ. Типичные ошибки:

Ссылка на код: h

IDOR - изменение чужих данных (мобильный API):

Ссылка на код тут

Безопасное управление сессией (PHP):

Ссылка на код тут

2. Инъекции

Встречаются везде, где есть пользовательский ввод и интерпретатор.

SQL-инъекция (Python):

Ссылка на код тут

XSS (JavaScript/PHP):

Ссылка на код тут

Инъекция в WebView (Android/Kotlin) - пересечение веб и мобилки:

Ссылка на код тут

3. Небезопасные зависимости (Supply Chain)

Supply chain атаки получили отдельную категорию в обоих топах - и это не случайно: один скомпрометированный пакет дает злоумышленнику доступ к тысячам организаций одновременно.

Как проверять зависимости (SCA - Software Composition Analysis)

Небезопасные зависимости легко ловить через SCA-подход - просто сканируйте дерево пакетов. В JS/Node.js запускайте npm audit, в Python - pip-audit, а в PHP - используйте встроенную команду composer audit или внешнюю утилиту local-php-security-checker. Добавьте Dependabot в репозиторий для авто-обновлений и настройте CI/CD так , чтобы сборка падала при High/Critical уязвимостях - это сильно снижает риски и дает спокойствие. Попробуйте на своем проекте, ждем результат.

Специфика мобильных приложений

Локальное хранилище: иерархия безопасности

Самая частая ошибка в мобильной разработке - хранить чувствительное там, куда доберется любой с рутованным телефоном.

Правильное хранение токена в Android (Kotlin) с использованием EncryptedSharedPreferences:

Ссылка на код тут

iOS - Keychain (Swift):

Ссылка на код тут

Certificate Pinning: защита сетевого трафика

Без pinning любой, у кого есть доступ к сети (или само устройство), может перехватить трафик через прокси.

Android Network Security Config (без кода):

Ссылка на код тут

Защита бинарного кода: уникальная мобильная проблема

В вебе исходники на сервере недоступны. В мобилке - APK можно скачать из магазина, декомпилировать через jadx и читать код почти как исходник на Java.

Специфика веб-приложений

Небезопасная конфигурация: инфраструктурные грехи

С ростом сложности инфраструктуры (Kubernetes, облако, микросервисы) неправильная конфигурация стала #2 в OWASP Web 2025. Примеры из реальной жизни:

Минимальный набор заголовков безопасности (Express.js):

Ссылка на код тут

Ненадежный дизайн: что не починишь рефакторингом

Это категория, которая появилась в OWASP 2021 и остается - потому что проблема реальная. Некоторые уязвимости возникают не из-за плохого кода, а из-за плохих архитектурных решений.

Пример: если система принимает цену товара от клиента, никакой input validation не поможет - нужно менять дизайн. Если механизм восстановления пароля основан на «секретных вопросах» - это дизайнерский провал.

Платформы: что дают, чего не дают

Выводы

Проблема не в платформе, а в подходе. Большинство уязвимостей - не экзотика. Хардкод ключей, отсутствие валидации, слабое хеширование - они существуют не потому что разработчики не знают как правильно, а потому что «работает же, потом поправим».

Бэкенд - общая точка ответственности. Мобильное приложение и веб-сайт могут работать с одним API. Если API уязвим к IDOR - оба клиента уязвимы. Безопасность серверной части важнее защиты конкретного клиента.

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

Supply chain - новая реальность. И в вебе (npm), и в мобилке (CocoaPods, Maven) зависимости - это внешний код, которому мы доверяем. Автоматическое сканирование (SCA) и SBOM - не опция, а необходимость.

Логирование и мониторинг - то, о чем все забывают. OWASP выделяет это в отдельную категорию не случайно. Среднее время обнаружения взлома - более 200 дней. Приложение без нормального мониторинга - приложение с незакрытым парадным входом.

Практический чек-лист

Для бэкенда (общий)

  •  Параметризованные запросы или ORM везде, где есть пользовательский ввод

  •  Авторизация проверяется на сервере, а не на клиенте

  •  ID пользователя берется из токена, а не из тела запроса

  •  Rate limiting на критичных эндпоинтах (логин, восстановление пароля)

  •  Логирование событий безопасности с алертами

  •  Регулярный аудит зависимостей (npm audit, pip-audit, dependabot)

Для веб-фронтенда

  •  CSP без 'unsafe-inline' для скриптов

  •  SameSite=Strict для авторизационных кук

  •  HttpOnly + Secure флаги

  •  CSRF-токены на формах изменения состояния

  •  HSTS с includeSubDomains

  •  Никакого innerHTML с пользовательскими данными

Для мобилки

  •  Токены - только в Keystore/Keychain, не в SharedPreferences/UserDefaults

  •  Certificate pinning с backup-пином и сроком обновления в календаре

  •  R8/ProGuard на релизных сборках

  •  FLAG_SECURE на экранах с чувствительными данными (защита от скриншотов)

  •  Никаких секретов в коде - даже обфусцированных

  •  Проверка на root/jailbreak - как доп. слой, не основной

Что почитать и поизучать дальше

  • OWASP Web Security Testing Guide (WSTG) - исчерпывающее руководство по тестированию веба, бесплатно

  • OWASP Mobile Application Security (MAS) - MASVS (стандарт) + MASTG (гайд по тестированию) + MAS Checklist

  • OWASP MobSF - автоматический статический и динамический анализ мобильных приложений

  • CWE/SANS Top 25 - список самых опасных классов уязвимостей независимо от платформы

  • iOS Security Guide от Apple - официальная документация по механизмам безопасности iOS

  • Android Security Guidelines от Google - официальные рекомендации для Android-разработчиков

  • PortSwigger Web Security Academy - бесплатные практические лабораторные по веб-уязвимостям

Авторы статьи:

  • Илья Новиков, технический директор @inova99

  • Данил Мануйлов, Максим Быков, Линар Огай, Максим Савченко, тимлиды

  • Тимофей Ищенко, техлид Frontend-разработки (направление web) @Is_Tim

  • Даниил Николаев, Frontend-разработчик (направление web)

Если статья вам откликнулась - поделитесь в комментариях, какие неочевидные находки были у вас на пентестах и аудитах. Самое интересное в безопасности - именно нестандартные кейсы, которых нет в OWASP.

Комментарии (2)


  1. TheHost
    18.05.2026 18:14

    Часто мобильное приложение это webview))


    1. codesrc Автор
      18.05.2026 18:14

      Ну да, и в этом нет ничего плохого - если гипотеза не выстрелит, не придется переписывать нативный код. WebView как раз и спасает на этапе проверки, пока непонятно, стоит ли вообще вкладываться в полноценную мобильную разработку.