SSR-страница может выглядеть корректно, но в HTML-исходнике содержать лишние персональные данные: email, телефон, внутренние поля или данные другого пользователя.
Это особенно опасно, потому что данные могут попасть в кеш CDN, поисковые роботы, логи и инструменты просмотра исходника.
Коротко: в HTML нужно отдавать только те данные, которые действительно нужны текущему пользователю и странице.Почему возникает проблема
Утечка появляется через initial state, hydration payload, общий кеш SSR, слишком широкий API-запрос на сервере, сериализацию всей модели пользователя или ошибку tenant-фильтра.
Что проверить в первую очередь
- что видно в view-source
- какие данные попадают в initial state
- есть ли CDN/SSR кеш
- учитывается ли текущий пользователь
- не сериализуется ли вся модель вместо нужных полей
Как я решаю такую задачу
Я анализирую серверную выдачу до выполнения JavaScript и убираю лишние поля на backend/SSR-слое.
- смотрю HTML-исходник под разными пользователями
- нахожу источник данных в SSR
- ограничиваю payload нужными полями
- исправляю кеш и права
- добавляю проверку на отсутствие чувствительных полей
Что подготовить
- страницу с SSR
- пример лишних данных
- стек проекта
- доступ к frontend/backend-коду
- есть ли CDN или edge cache
Сроки и риски
Сначала нужно закрыть утечку и сбросить опасный кеш. Затем стоит проверить похожие SSR-страницы и initial state.
Чего лучше не делать
Не скрывайте данные только CSS или JavaScript. Если они уже в HTML, пользователь может их увидеть.
FAQ
Почему данные видны в исходнике, хотя на странице скрыты?
SSR уже отдал их в HTML или hydration payload до работы frontend.
CDN может усугубить проблему?
Да, если закеширует персональную HTML-страницу.
Нужно ли чистить кеш?
Да, если опасные HTML-ответы могли попасть в CDN или proxy.
Как проверять дальше?
Автотестом или сканером, который ищет чувствительные поля в HTML.
Нужна похожая задача?
Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Пришлите ссылку, пример ошибки и короткое описание того, как должно работать. Я посмотрю задачу, предложу безопасный план и скажу, какие доступы понадобятся.
Итог
SSR должен отдавать минимальный безопасный HTML, без лишних персональных данных, чужих записей и кеширования приватной выдачи.