System Design Space
Граф знанийНастройки

Обновлено: 1 апреля 2026 г. в 09:00

Безопасность frontend-приложений и browser threat model

средний

XSS, CSRF, CSP, token storage, third-party scripts, supply-chain risks и практический threat model для современных frontend-приложений.

Browser threat model неудобен тем, что frontend одновременно является и пользовательским интерфейсом, и недоверенной средой исполнения. Здесь нельзя просто 'положиться на backend': XSS, CSRF, token leakage, third-party scripts и supply-chain риски живут прямо в клиентской поверхности.

Глава ценна тем, что помогает говорить о frontend security как об архитектуре доверенных границ. Она показывает, почему CSP, cookie strategy, storage choices, sandboxing и политика подключения внешних скриптов должны приниматься так же осознанно, как API security или доступ к данным на сервере.

Для design review это особенно полезный материал, потому что он заставляет смотреть на браузер не как на harmless view-layer, а как на публичный runtime с постоянным давлением со стороны attacker-модели и продуктовых компромиссов.

Практическая польза главы

Практика проектирования

Переводите знания о browser threat model, доверенных границах и защите frontend-поверхности в конкретные решения по composition, владению (ownership) и runtime-поведению клиентской системы.

Качество решений

Оценивайте архитектуру по измеримым эффектам: скорость delivery, стабильность UI, наблюдаемость, цена изменений и эксплуатационные риски.

Аргументация на интервью

Стройте ответ как цепочку problem -> constraints -> architecture -> компромиссы (trade-offs) -> migration path, с явной аргументацией frontend-выбора.

Формулировка компромиссов

Фиксируйте компромиссы вокруг browser threat model, доверенных границах и защите frontend-поверхности: масштаб команды, технический долг, performance budget и долгосрочная поддержка.

Контекст

OWASP Top 10 in the context of System Design

Browser threat model - это не отдельный мир, а клиентское продолжение тех же security assumptions и defaults.

Читать обзор

Frontend живет в недоверенной среде исполнения. Пользовательский браузер, сторонние расширения, injected scripts и произвольный network environment означают, что клиент нельзя считать безопасным местом для логики доверия, хранения секретов или неконтролируемого HTML.

Поэтому security для frontend начинается не с чеклиста уязвимостей, а с вопроса: какие границы доверия реально существуют в браузере.

Главные классы угроз

XSS и script injection

Самый болезненный класс угроз для frontend: user-controlled HTML, unsafe markdown rendering, third-party widgets и DOM-based sinks быстро превращают UI в точку захвата токенов и пользовательских действий.

CSRF, session fixation и browser trust assumptions

Даже если auth реализован сервером, frontend обязан понимать, как работают cookies, same-site policy, redirect flows и anti-replay assumptions в браузере.

Token storage и client secrets illusion

Любые long-lived tokens в browser storage должны оцениваться как потенциально доступные злоумышленнику. Frontend не должен считать localStorage или embedded config безопасным сейфом.

Supply chain и third-party scripts

Analytics, chat widgets, A/B tooling, CDN-hosted libraries и browser extensions расширяют attack surface. Их нужно проектировать как часть threat model, а не как маркетинговую интеграцию.

Слои защиты

CSP и ограничение источников скриптов

CSP не решает все проблемы, но резко сокращает стоимость случайного XSS. Особенно важны nonce/hash strategy, запрет inline script и контроль third-party domains.

Безопасные auth boundaries

Session cookies, PKCE, short-lived tokens, refresh rotation и backend-for-frontend часто безопаснее, чем жирные bearer tokens, разбросанные по клиентскому коду.

Escaping и typed rendering surfaces

Каждый путь, который рендерит HTML, markdown, template fragments или dangerously-set markup, должен быть отдельной reviewed boundary с sanitize policy.

Dependency hygiene и provenance

Lockfiles, dependency review, artifact integrity и ограничение числа пакетов нужны фронтенду не меньше backend-сервисам.

Security review вопросы

  • Какие данные мы считаем trusted в браузере и на чем основано это доверие.
  • Можно ли выполнить произвольный скрипт через content path, markdown, WYSIWYG или third-party snippet.
  • Какие client-side tokens или session artifacts дают слишком большой blast radius при компрометации.
  • Как быстро мы можем отключить небезопасную внешнюю интеграцию или флаг без полной перекатки продукта.

Ошибочная интуиция

Считать frontend “тонким view layer” и поэтому не проводить отдельный threat modeling для browser-side flows. Именно из-за этого поздно замечают XSS sinks, слабые third-party integrations и опасные решения по token storage.

Browser security зрелого frontend-продукта держится на безопасных defaults: controlled rendering surfaces, minimal token exposure, strict script policy и возможности быстро выключить небезопасную интеграцию.

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки