Service Worker и приватный кеш: данные кабинета после выхода
Как не оставить ответы личного кабинета в офлайн-кеше PWA после выхода пользователя или смены аккаунта.
Коротко о главном
- Чем опасно
- Просмотр данных предыдущего аккаунта на общем устройстве.
- С чего начать защиту
- Используйте явный список публичных ресурсов для офлайн-кеша; исключите кабинет, токены и приватные API.
- Как подтвердить
- Нужны ручной аудит и проверка реализации. Отсутствие находок во внешнем скане не подтверждает безопасность.
В этой статье
- Продукт
- Веб-приложения
- Оценка риска
- Уровень зависит от конфигурации
Как проверить и что учитывать
Нужна ручная проверка
Для подтверждения нужны анализ реализации и проверки на согласованном тестовом контуре. Публикация не означает автоматическое обнаружение этого сценария FindRisk. Не делайте вывод о наличии уязвимости только по одному внешнему признаку: подтвердите результат в настройках и версии компонента.
Что нужно для подтверждения
На стенде войдите под тестовым аккаунтом A, откройте документ с синтетическими данными, выйдите и переключитесь на B в том же профиле браузера. Проверьте офлайн-режим, возврат назад и другие вкладки. В DevTools изучите CacheStorage: приватный ответ не должен сохраняться или возвращаться после завершения сессии. Повторите проверку после обновления Service Worker.
Ограничения вывода
- Внешний ответ не раскрывает все роли, обработчики и настройки внутренних компонентов.
- Используйте только свои системы или письменное разрешение владельца; нагрузочные проверки согласуйте отдельно.
Что это за уязвимость
Service Worker может перехватывать запросы и возвращать сохранённые ответы без обращения к серверу. Серверная проверка сессии не защищает уже сохранённую копию. Если обработчик кеширует все успешные ответы, документы кабинета могут остаться доступными в том же профиле браузера после выхода.
Когда возникает риск
Риск возникает при кешировании персональных API-ответов по одному URL без учёта жизненного цикла сессии. Особенно важны общие устройства и переход между аккаунтами. Само наличие Service Worker не является уязвимостью: публичные ассеты можно кешировать, а приватные данные требуют отдельной модели хранения.
Возможные последствия
Как не оставить ответы личного кабинета в офлайн-кеше PWA после выхода пользователя или смены аккаунта.
- Просмотр данных предыдущего аккаунта на общем устройстве.
- Отображение устаревших прав и персональных документов офлайн.
Как защитить приложение
Исправляйте причину в обработчике, а не только внешний симптом.
- Используйте явный список публичных ресурсов для офлайн-кеша; исключите кабинет, токены и приватные API.
- Очищайте пользовательские кеши при выходе и смене аккаунта, учитывая открытые вкладки.
- Не считайте Cache-Control достаточной защитой: программная запись в CacheStorage должна проверяться отдельно.
- При обновлении обработчика удаляйте устаревшие кеши и проверяйте поведение уже контролируемых вкладок.
Как безопасно проверить исправление
На стенде войдите под тестовым аккаунтом A, откройте документ с синтетическими данными, выйдите и переключитесь на B в том же профиле браузера. Проверьте офлайн-режим, возврат назад и другие вкладки. В DevTools изучите CacheStorage: приватный ответ не должен сохраняться или возвращаться после завершения сессии. Повторите проверку после обновления Service Worker.
Оценка риска и границы сканирования
Средний уровень — ориентировочная редакционная оценка, не CVSS подтверждённой находки. Для конкретной системы приоритет зависит от доступных данных, полномочий и компенсирующих мер; последствия могут быть значительно серьёзнее.
Отсутствие находки во внешнем скане не доказывает безопасность реализации. Проверяйте сценарии после входа, альтернативные маршруты и внутренние сервисы.
Как проходит проверка
Для подтверждения нужны анализ реализации и проверки на согласованном тестовом контуре. Публикация не означает автоматическое обнаружение этого сценария FindRisk. Автоматический результат показывает внешний признак риска и требует проверки специалистом с учётом конкретной конфигурации.
Проверить другие внешние рискиЧто делать после обнаружения
- Зафиксируйте затронутый сценарий и сохраните журналы без токенов и персональных данных.
- Ограничьте проблемный обработчик, оцените доступные данные и назначьте владельца исправления.
- Устраните первопричину и добавьте регрессионную проверку на тестовых данных.
Частые вопросы
Что означает риск «Service Worker и приватный кеш»?
Как не оставить ответы личного кабинета в офлайн-кеше PWA после выхода пользователя или смены аккаунта.
Можно ли подтвердить проблему только внешней проверкой?
Для подтверждения нужны анализ реализации и проверки на согласованном тестовом контуре. Публикация не означает автоматическое обнаружение этого сценария FindRisk. Итог нужно сопоставить с конфигурацией, версиями и правами доступа на вашем сайте.
Что сделать в первую очередь?
Используйте явный список публичных ресурсов для офлайн-кеша; исключите кабинет, токены и приватные API.