Сторонний browser-код и privacy¶
Требования этого документа применяются к сторонним scripts, SDK, widgets, tag
manager и связанным cookies или browser storage в frontend-приложении.
Целостность источника дополнительно регулируется FE-SEC-006, а телеметрия —
FE-OBS-007. Уровни обязательности определены в корневом README.md.
FE-EXT-001. Реестр и изменение стороннего кода¶
Уровень: MUST
Применяется к: каждому стороннему browser-компоненту
Проект должен иметь версионируемый закрытый реестр с владельцем, назначением, источником и версией кода, условиями загрузки, читаемыми и записываемыми категориями данных, сетевыми назначениями и способом отключения компонента. Фактические CSP, allowlist и browser-запросы должны соответствовать реестру.
Tag manager не должен позволять публиковать отсутствующий в реестре код. Изменение его container, rule или template должно проходить тот же review и сопоставляться с release либо отдельным аудируемым изменением.
Обоснование¶
Сторонний код выполняется с полномочиями страницы, а изменение tag manager вне репозитория способно обойти review приложения.
Проверка¶
- сопоставление реестра с bundle, DOM, CSP и сетевыми запросами;
- тест публикации незарегистрированного tag;
- review владельца, версии и истории изменения.
Исключения¶
Browser-возможность, полностью реализованная кодом проекта без внешней загрузки и независимого получателя данных, не является сторонним компонентом.
FE-EXT-002. Consent и локальные идентификаторы¶
Уровень: MUST
Применяется к: сторонней обработке, для которой политика требует consent
До положительного consent приложение не должно загружать соответствующий код, отправлять ему запрос, создавать его cookie или запись browser storage. Отсутствующее решение и отказ должны отличаться от согласия. Consent должен быть связан с закрытыми назначениями и категориями данных, а не разрешать неограниченную будущую обработку.
После отзыва приложение должно прекратить новые загрузки и передачу, удалить контролируемые им локальные identifiers и применить опубликованный механизм отзыва получателя, если он предусмотрен контрактом. Обязательное техническое storage должно быть отделено от необязательного и не должно повторно использоваться для другой цели.
Обоснование¶
Блокировка только прикладного события после загрузки SDK не прекращает его собственные cookies, запросы и автоматический сбор.
Проверка¶
- network- и storage-тест до решения, после allow, deny и revoke;
- тест независимого consent для разных назначений;
- проверка удаления локальных identifiers и вызова механизма отзыва.
Исключения¶
Обработка без consent допустима только для закрытого назначения и данных, которые разрешены принятой политикой на другом основании.
FE-EXT-003. Ограниченное влияние и отключение¶
Уровень: MUST
Применяется к: загрузке и выполнению стороннего browser-компонента
Загрузка, очередь вызовов и retry должны иметь конечные границы. Недоступность, медленный ответ или исключение стороннего компонента не должны блокировать сценарий, объявленный проектом критичным, отменять его результат или создавать неограниченное потребление ресурсов.
Production-конфигурация должна позволять отключить компонент без изменения
прикладного контракта и без предоставления ему новых данных. Отключение не
должно обходить cleanup, требуемый FE-EXT-002, или оставлять приложение в
неопределённом состоянии.
Обоснование¶
Сторонний runtime находится вне контроля проекта и не должен становиться обязательной синхронной зависимостью основного сценария.
Проверка¶
- тест timeout, исключения, блокировки и переполнения очереди;
- e2e-тест каждого объявленного критичного сценария при недоступном и отключённом компоненте;
- проверка прекращения сетевых запросов после отключения.
Исключения¶
Сторонняя identity или payment-граница MAY быть обязательной для отдельного сценария, если отказ имеет конечный пользовательский результат и не блокирует остальное приложение.