Безопасность и тестирование: карта раздела
В краткой версии учебника аутентификация и тестирование были сконцентрированы в двух уроках: ты научился выдавать JWT-пару, хешировать пароли через Argon2, писать unit-тесты на Vitest и один-два E2E-сценария на Playwright. Этого достаточно, чтобы не выглядеть новичком, но недостаточно, чтобы спроектировать систему, которую сложно сломать, и покрыть её тестами так, чтобы рефакторинг не был русской рулеткой.
Этот раздел — глубокое погружение. Мы разберём подпись JWT на байтовом уровне и узнаем, чем RS256 отличается от HS256 не только в API, но и в модели доверия. Посмотрим в лицо реальным атакам: alg: none, инъекции через kid, перебор слабого секрета. Отстроим полный цикл access/refresh с ротацией и отзывом через Redis. Пошагово реализуем «Вход через Google» на OAuth 2.0 + PKCE и разложим по полочкам OIDC. Отдельной главой идёт веб-безопасность: XSS во всех трёх ипостасях, CSP директива за директивой, CSRF, CORS, SQL-инъекции, security headers, rate limiting и разбор каждого пункта OWASP Top 10.
Вторая половина раздела — тестирование как инженерная дисциплина. Ты увидишь, почему покрытие 100% не спасает от багов, как поднимать настоящий PostgreSQL и Redis в Testcontainers, и как изолировать тесты друг от друга. В финальной главе — Playwright в деталях: storageState для авторизации, проекты для изоляции, борьба с флаками, плюс качество кода (ESLint 9 flat config, Husky, conventional commits) и контрактное тестирование Pact.
Порядок глав
Заголовок раздела «Порядок глав»-
Аутентификация в деталях: JWT, OAuth 2.0, пароли — фундамент. JWT изнутри, атаки и защита, access/refresh стратегия с ротацией, хранение токенов на клиенте, все гранты OAuth 2.0, OIDC, хеширование паролей. Без этой главы остальные главы про безопасность повисают в воздухе: ты не сможешь правильно настроить CSRF-защиту, пока не понимаешь, почему токены в httpOnly cookie создают CSRF-проблему, которой нет у Bearer-токенов.
-
Веб-безопасность: XSS, CSRF, CORS, OWASP — периметр. Здесь собрано всё, чем ломают веб-приложения извне: инъекции, межсайтовые атаки, неправильные заголовки, масс-ассайнмент и типовые ошибки конфигурации. Глава построена вокруг OWASP Top 10 — каждый пункт разбирается с примерами уязвимого и исправленного кода.
-
Unit и интеграционные тесты — первая половина пирамиды. Философия тестирования, AAA-паттерн, полный конфиг Vitest, моки правильной глубины, coverage-пороги и их ограничения, Supertest для HTTP-слоя, Testcontainers с реальными PostgreSQL и Redis, изоляция тестов и фабрики данных.
-
E2E, качество кода и контрактное тестирование — вершина пирамиды и инженерная гигиена. Playwright в деталях: фикстуры, автоожидания, локаторы по ролям, tracing, retries, codegen, storageState для аутентификации. Сравнение с Cypress. Затем — ESLint 9 flat config, Prettier, Husky + lint-staged, conventional commits и Pact для consumer-driven контрактов.
Как работать с разделом
Заголовок раздела «Как работать с разделом»Иди по порядку: механика JWT нужна для понимания CSRF, а интеграционные тесты логично писать после того, как защита от SQL-инъекций уже реализована — так тесты доказывают, что защита работает. Не пропускай разделы «Типичные ошибки и грабли» — это концентрат продакшен-горя: именно эти вещи спрашивают на собеседованиях и именно их находят пентестеры.
Чем заканчивается раздел
Заголовок раздела «Чем заканчивается раздел»После четвёртой главы у тебя будет: аутентификация с ротацией refresh-токенов и отзывом через Redis, OAuth-вход через Google с PKCE, CSP и security headers, rate limiting на чувствительных эндпоинтах, пирамида тестов с порогами coverage в CI, E2E-сценарии с трейсингом и изолированными состояниями, а также pre-commit и CI-проверки качества кода. Это полный набор для уверенного ответа на вопрос «как вы обеспечиваете безопасность и качество в проекте?» — не словами, а архитектурой репозитория.