Раздел подготовки

Безопасность: вопросы для собеседования QA

QA не заменяет security-инженера, но должен замечать базовые риски: доступы, инъекции, хранение данных и опасные сценарии.

33 вопросов 12 базовых 3 уровня: Junior, Middle, Senior

Что закрывает этот раздел

Повторить security-basics для QA собеседования и практических проверок.

  • объяснять XSS и SQL injection
  • проверять права доступа
  • видеть риски авторизации

С чего начать

Если времени мало, начни с базовых вопросов: они чаще всего помогают пройти первый технический фильтр и показать структуру мышления.

  1. В чём разница между аутентификацией, авторизацией и JWT?
  2. В чём разница между идентификацией, аутентификацией и авторизацией?
  3. Какие существуют виды аутентификации?
  4. Какие существуют виды авторизации?
  5. Как выполнять анонимизацию и маскирование тестовых данных?
  6. Что такое SQL-инъекция и как от неё защититься?
  7. Что такое XSS и какие виды бывают?
  8. Чем отличаются аутентификация, авторизация и идентификация?

Вопросы и ответы

В чём разница между аутентификацией, авторизацией и JWT?

Middle

Аутентификация подтверждает личность пользователя (ты — это ты), авторизация определяет его права в системе (что тебе разрешено).

JWT (JSON Web Token) — компактный формат токена: три части через точку — header (алгоритм подписи), payload (claims: sub, exp, iat, roles), signature. Сервер верифицирует подпись без обращения к БД.

Из практики: при тестировании JWT проверяю: токен принимается только с валидной подписью; истёкший токен (exp) отклоняется; права из claims реально ограничивают доступ к ресурсам.

Частые ошибки

  • Хранят JWT в localStorage без оценки рисков.
  • Отсутствие истечения/ревокации.

Дополнительные вопросы

  • Как протестируете истёкший токен?
  • Что проверять в refresh поток?

В чём разница между идентификацией, аутентификацией и авторизацией?

Middle

Идентификация — это ответ на вопрос «кто пытается войти».

Аутентификация подтверждает личность, а авторизация определяет, что этому пользователю разрешено делать в системе.

Из практики: эти понятия важно не путать в баг-репортах, иначе команда теряет время на неверную диагностику.

Частые ошибки

  • Смешивают аутентификацию с авторизацией: например, полагают, что ввода пароля достаточно для доступа ко всему, не учитывая распределение прав.
  • Забывают про идентификацию как отдельный шаг: между "кто это?" и "проверили ли?" и "что ему можно?" – все три этапы важны для безопасности.

Дополнительные вопросы

  • Что происходит, если пользователь прошёл аутентификацию, но у него нет авторизации на запрошенный ресурс?
  • Какие данные могут выступать в роли идентификатора пользователя в системе помимо логина?

Какие существуют виды аутентификации?

Middle

Основные виды: по паролю, по одноразовому коду, по аппаратному ключу, по биометрии и комбинированные схемы MFA.

В реальных системах обычно используют комбинацию факторов, чтобы снизить риск компрометации одного канала.

Из практики: при тестировании важно проверять не только успешный вход, но и восстановление доступа, блокировки и повторные попытки.

Частые ошибки

  • Опираются только на пароли, не внедряя второго фактора даже в критичных системах.
  • Сохраняют пароли в открытом виде (вместо хэширования с солью), что касается реализации, но это частая ошибка.

Дополнительные вопросы

  • Что такое двухфакторная аутентификация и почему она важна?
  • Какой метод аутентификации наиболее удобен для пользователя, наименее безопасен?

Какие существуют виды авторизации?

Middle

Чаще всего в продуктах встречаются ролевая, атрибутная и ресурсная модели авторизации.

QA проверяет не только «доступ есть/нет», но и границы прав для каждой роли в каждом чувствительном действии.

Из практики: больше всего дефектов нахожу на переходах ролей и в редких комбинациях прав.

Частые ошибки

  • Неявно применяют авторизацию, что не защищает ресурс фактически.
  • Назначают всем пользователей администраторские права для упрощения, что нарушает принцип минимальных привилегий и увеличивает риск.

Дополнительные вопросы

  • Что такое принцип наименьших привилегий и как он реализуется в авторизации?
  • Как в системе с ролевой моделью поступить, если нужно разовое особое разрешение для конкретного пользователя (не характерное для роли)?

Как выполнять анонимизацию и маскирование тестовых данных?

Middle

Анонимизация — необратимая замена реальных данных: имён, телефонов, email — на синтетические значения. Маскирование — частичное скрытие: иванов@mail.ru → и***@mail.ru.

На практике применяю: faker-библиотеки для генерации синтетических данных, маскирование в SELECT-запросах перед выгрузкой в тестовую среду, обфускацию через скрипты миграции.

Из практики: критично проверять, что маскировка применяется везде — в БД, API-ответах, логах и резервных копиях, иначе утечка ПДн остаётся через побочные каналы.

Частые ошибки

  • Неполное покрытие sensitive данных.
  • Возможность деанонимизации.
  • Потеря референциальной целостности.

Дополнительные вопросы

  • Как сохраняете связи в данных при маскировании?
  • Стратегии для временных данных?

В чём разница между OAuth2 Authorization Code Flow и Implicit Flow?

Senior

Authorization Code Flow: фронт получает code, обменивает его на токен через бэкенд. Секрет клиента не попадает в браузер — безопасно для серверных приложений и SPA с PKCE.

PKCE (Proof Key for Code Exchange) — расширение Authorization Code Flow для публичных клиентов (SPA, мобильные): code_verifier генерируется клиентом, code_challenge отправляется на сервер. Без PKCE Authorization Code уязвим для перехвата. Implicit Flow (устаревший) выдаёт токен напрямую в URL браузера — небезопасно.

Из практики: для новых проектов Authorization Code + PKCE — стандарт. При тестировании проверяю, что Authorization Code нельзя использовать дважды и что PKCE не обходится при его отсутствии.

Частые ошибки

  • Хранение секретов на клиенте.
  • Отсутствие PKCE.

Дополнительные вопросы

  • Как тестировать refresh/rotation?
  • Как обнаружить утечку токенов?

Что QA должен проверять в клиентской безопасности: XSS, CSRF и CSP?

Senior

XSS-проверки показывают, можно ли выполнить вредный скрипт через пользовательский ввод или сохранённые данные.

CSRF-проверки подтверждают, что критичные действия защищены токеном и проверкой происхождения запроса, а CSP ограничивает загрузку опасного контента.

Из практики: базовый набор проверок XSS/CSRF/CSP даёт быстрый сигнал о рисках ещё до полноценного аудита.

Частые ошибки

  • Тестируют только успешные операции.
  • Нет негативных кейсов на токены.

Дополнительные вопросы

  • Как воспроизвести отражённую XSS?
  • Как валидируете CSRF-токен?

Как тестировать анонимизацию персональных данных?

Middle

Проверяю, что персональные поля маскируются устойчиво и не восстанавливаются через косвенные признаки (комбинации полей, временны́е метки).

Смотрю, что маскировка применяется во всех точках: основная БД, аналитические хранилища, API-ответы, журналы событий и резервные копии.

Из практики: самая частая ошибка — маскируют данные в продовой БД, но забывают про резервные копии и аналитический DWH. Проверяю все каналы утечки, а не только основную базу.

Частые ошибки

  • Маскируют только основной источник и забывают про копии данных.

Дополнительные вопросы

  • Какие поля считаешь персональными в первую очередь?

Что такое SQL-инъекция и как от неё защититься?

Junior

SQL-инъекция — это атака, когда злоумышленник подставляет в пользовательский ввод фрагмент SQL, и сервер исполняет его, потому что запрос строится конкатенацией строк.

Защита: всегда использовать параметризованные запросы (prepared statements). Параметры передаются отдельно от текста запроса, и СУБД никогда не интерпретирует их как код.

Из практики: при ревью кода первое, на что смотрят — есть ли «склейка» строк в SQL. Любое "SELECT * FROM users WHERE name = '" + name + "'" — потенциальная инъекция.

Частые ошибки

  • Думать, что фильтрация символов (типа escape кавычек) достаточно — есть множество обходов.
  • Использовать ORM, но всё равно вставлять сырой SQL с конкатенацией для динамических полей.

Дополнительные вопросы

  • Чем отличается ORM от prepared statement?
  • Как защитить динамические имена таблиц/столбцов от инъекции?

Что такое OWASP Top 10 и зачем он QA-инженеру?

Middle

OWASP Top 10 — это список наиболее распространённых угроз для веб-приложений, обновляемый раз в несколько лет. Текущая версия включает Broken Access Control, Injection, Cryptographic Failures, Insecure Design и др.

QA использует его как чек-лист: проверить наиболее частые уязвимости (SQL-инъекции, XSS, неавторизованный доступ, утечка чувствительных данных, небезопасные настройки).

Из практики: даже без отдельного security-инженера базовая проверка по OWASP Top 10 ловит большинство уязвимостей, которые потом нашли бы при пентесте.

Частые ошибки

  • Считать, что OWASP — это «список тестов» — это категории, под каждой много конкретных проверок.
  • Полагаться только на автосканеры — они находят не всё.

Дополнительные вопросы

  • Что входит в категорию Broken Access Control?
  • Какие автосканеры стоит использовать?

Что такое XSS и какие виды бывают?

Middle

XSS (Cross-Site Scripting) — это уязвимость, при которой злоумышленник внедряет JavaScript в страницу, и он выполняется в браузере других пользователей.

Виды: stored (вредоносный код сохраняется в БД — например, в комментарии, и выполняется у всех, кто смотрит), reflected (код приходит в URL и отражается в ответе), DOM-based (внедрение через клиентский JS без участия сервера).

Из практики: защита — экранировать вывод во всех местах, использовать CSP, отказаться от innerHTML с пользовательскими данными. QA проверяет вставку <script>alert(1)</script>, ' onerror=alert(1)>, javascript: ссылок.

Частые ошибки

  • Считать, что фреймворк автоматически защищает от XSS — почти всегда защищает, но innerHTML, dangerouslySetInnerHTML, v-html сводят защиту на нет.
  • Тестировать только базовые payload — реальные пэйлоады изощрённее.

Дополнительные вопросы

  • Что такое DOM-based XSS?
  • Как CSP помогает защититься от XSS?

Что такое CSRF и как от него защититься?

Middle

CSRF (Cross-Site Request Forgery) — это атака, при которой пользователь, авторизованный на сайте A, заходит на вредоносный сайт B, и B отправляет запрос на A от имени пользователя (потому что cookies автоматически прикрепляются).

Защита: CSRF-токен (уникальный для каждой сессии/формы), SameSite cookies (Lax или Strict), проверка заголовков Origin/Referer, использование Authorization header вместо cookies для API.

Из практики: для современных SPA с JWT в localStorage CSRF менее актуален. Для классических серверных рендеров с session cookie — обязательная защита.

Частые ошибки

  • Проверять только Referer — он может быть пустым или подделанным в некоторых браузерах.
  • Использовать одинаковый CSRF-токен на всё приложение — должен быть привязан к сессии.

Дополнительные вопросы

  • Что такое SameSite=Lax?
  • Чем CSRF отличается от XSS?

Какие сценарии тестирования авторизации стоит проверить?

Middle

Горизонтальная привилегия: может ли user A прочитать/изменить данные user B (типичный IDOR — Insecure Direct Object Reference). Подменяем ID в URL/тело запроса и проверяем доступ.

Вертикальная: может ли обычный пользователь выполнить админскую операцию. Запрашиваем admin-эндпоинт с обычным токеном.

Из практики: также проверяют — истекает ли токен, отзывается ли при logout, работают ли refresh-токены, не утекают ли они в логи/ссылки/реферер.

Частые ошибки

  • Тестировать только UI — обходы возможны через прямой вызов API.
  • Считать, что 'я не вижу кнопку' = недоступно. UI прячет, бэк может разрешать.

Дополнительные вопросы

  • Что такое IDOR?
  • Как протестировать вертикальную привилегию?

Что такое инжекции и какие виды бывают?

Middle

Инжекция — это внедрение управляющих конструкций интерпретатора в данные. SQL-инжекция (в БД), Command injection (в shell), LDAP-инжекция, NoSQL-инжекция, OS-команды через path/file, шаблонные инжекции (SSTI).

Все они возникают, когда пользовательский ввод склеивается с командой/запросом без должной обработки.

Из практики: защита — параметризованные запросы, экранирование на уровне библиотеки, белые списки допустимых значений. QA проверяет специальные символы интерпретатора и реакцию.

Частые ошибки

  • Защищаться через регулярки, отфильтровывая только некоторые символы — обходов много.
  • Полагаться на ORM как панацею — есть raw query и dynamic SQL.

Дополнительные вопросы

  • Что такое SSTI (Server-Side Template Injection)?
  • Чем отличается NoSQL-инжекция от SQL?

Что такое sensitive data exposure и как тестировать?

Middle

Это ситуация, когда чувствительные данные (пароли, токены, персональные данные, банковские реквизиты) попадают туда, куда не должны: в логи, в URL, в кеш CDN, в публичный API, в нешифрованной БД.

Тесты: открыть DevTools и посмотреть сетевые ответы — нет ли там лишних полей. Поискать пароли в логах. Проверить, что cookies с токеном помечены HttpOnly и Secure.

Из практики: типовая проблема — API возвращает объект пользователя целиком, включая hash пароля и внутренние ID. Также: пароли в URL (через GET), личные данные в localStorage.

Частые ошибки

  • Не смотреть, что отдаёт API, проверяя только UI.
  • Считать, что HTTPS защищает данные на стороне клиента — нет, кто угодно увидит в DevTools.

Дополнительные вопросы

  • Чем HttpOnly cookie защищает токен?
  • Что такое маскирование PII?

Какие сценарии стоит проверить на форме загрузки файлов?

Middle

Тип файла: что приходит — реально картинка или маскированный исполняемый файл (проверяют по magic bytes, не только по расширению). Размер: попытка залить 1ГБ — обработает или зависнет. Имя: путь обхода (../../etc/passwd), специальные символы.

Содержимое: SVG может содержать JS, документ — макросы. Двойные расширения (file.jpg.php). Безопасное хранение — на отдельном домене, без выполнения серверных скриптов.

Из практики: типовые уязвимости — загрузка веб-шелла, обход через case-sensitivity (.PHP), MIME-spoof. Тесты на формат, размер, имя, проверка серверной валидации.

Частые ошибки

  • Проверять только расширение в JS — на сервере должно дублироваться.
  • Не ограничивать общий объём загрузок — DoS через диск.

Дополнительные вопросы

  • Чем magic bytes отличаются от MIME-типа?
  • Почему загруженные файлы лучше хранить на отдельном домене?

Что такое security headers и какие важны?

Middle

Это HTTP-заголовки, которыми сервер сообщает браузеру правила безопасности. Главные: Content-Security-Policy (откуда грузить скрипты), Strict-Transport-Security (только HTTPS), X-Frame-Options (запретить встраивание в iframe), X-Content-Type-Options: nosniff, Referrer-Policy.

Также важны Set-Cookie с флагами HttpOnly, Secure, SameSite, и Permissions-Policy для управления API (камера, гео).

Из практики: тестировщик проверяет наличие через DevTools или утилиты вроде securityheaders.com. Их отсутствие — типичная находка пентеста.

Частые ошибки

  • Включить строгий CSP без подготовки — поломает рекламу/аналитику.
  • Забыть про cookies-флаги.

Дополнительные вопросы

  • Что такое HSTS preload?
  • Чем X-Frame-Options отличается от frame-ancestors в CSP?

Какие сценарии тестировать на брутфорс и rate limiting?

Middle

Сценарии: 10 неправильных паролей подряд — блокировка/задержка/капча? Спам OTP — ограничивает ли по email/телефону/IP? API: 1000 запросов за минуту — какие коды и через какое время?

Также проверяют, что лимиты применяются на правильном слое (по пользователю, не только по IP — иначе обход через несколько IP).

Из практики: rate limiting должен быть на критичных эндпоинтах (логин, OTP, регистрация, восстановление, платежи). Отсутствие — типовая уязвимость, ведущая к brute force и SMS-бомбингу.

Частые ошибки

  • Лимитировать только UI — обход через прямой API.
  • Лимит только по IP — пользователи за NAT страдают, а злоумышленник меняет.

Дополнительные вопросы

  • Что такое token bucket?
  • Чем CAPTCHA опасна для UX?

Что такое чек-лист security для нового релиза?

Middle

Базовые позиции: новые эндпоинты — есть ли авторизация и привилегии; новые поля в API — нет ли лишних данных; новые формы — нет ли XSS, инжекций, загрузки файлов без валидации; новые токены — корректная ротация.

Также: обновление зависимостей с известными уязвимостями (npm audit, snyk), security-headers, корректная работа на HTTPS, защита от CSRF на изменяющих запросах.

Из практики: хорошо помогает специальный smoke security-check для каждого релиза — 20-30 минут проверки наиболее частых ошибок.

Частые ошибки

  • Делать security-проверки раз в год — между ними успевают накопиться баги.
  • Полагаться только на автоматизацию — некоторые угрозы видны только при ручном анализе.

Дополнительные вопросы

  • Что такое SAST и DAST?
  • Как организовать security review для каждой фичи?

Что такое broken access control (OWASP A01)?

Middle

Самая частая категория уязвимостей. Включает: IDOR (доступ к чужим объектам по ID), отсутствие проверки роли, обход path через ../, доступ к админ-эндпоинтам без авторизации.

Тестируют: меняют ID в URL/body, удаляют токен или меняют на чужой, идут на админ-эндпоинты с обычным токеном.

Из практики: типовая ошибка разработчиков — проверять права на UI и забывать на API. Тест через прямой API быстро находит.

Частые ошибки

  • Тестировать только UI.
  • Полагать, что 'если кнопки нет — недоступно'.

Дополнительные вопросы

  • Что такое IDOR?
  • Как протестировать админ-эндпоинты обычным пользователем?

Что такое JWT и какие у него подводные камни?

Middle

JWT — это токен с header, payload, signature, кодированный в base64. Сервер подписывает, клиент хранит и отправляет в Authorization header.

Подводные камни: alg=none (отказ от проверки подписи), плохая ротация ключей, утечка (нельзя отозвать без blacklist), несовершенство в content (PII в открытом payload).

Из практики: payload не шифруется, base64 = читаемый. Не кладите туда чувствительные данные. Для отзыва нужен blacklist или короткий TTL + refresh-токены.

Частые ошибки

  • Хранить JWT в localStorage без HttpOnly cookie — украдут через XSS.
  • Не использовать exp.

Дополнительные вопросы

  • Что такое alg=none атака?
  • Как реализовать revocation?

Что такое OAuth 2.0 и какие в нём роли?

Middle

OAuth 2.0 — протокол делегирования авторизации. Роли: Resource Owner (пользователь), Client (приложение), Authorization Server (выдаёт токены), Resource Server (хранит данные).

Flows: Authorization Code (с PKCE) для web/mobile, Client Credentials для server-to-server, Device Code для TV.

Из практики: в 2025 году implicit и password flow считаются устаревшими. Authorization Code + PKCE — рекомендованный для большинства приложений.

Частые ошибки

  • Использовать implicit flow в новых приложениях.
  • Хранить access token надолго — токены должны жить минуты-часы.

Дополнительные вопросы

  • Что такое PKCE?
  • Чем OIDC отличается от OAuth?

Какие способы атаки на API через подмену типов?

Middle

Type confusion: подмена числа на строку, объекта на массив, расширение JSON-payload неожиданными полями. Если бэкенд не валидирует — ведёт к багам и уязвимостям.

В NoSQL injection в Mongo: подмена строки на {$ne: null} обходит проверку пароля.

Из практики: всегда проверяйте, что бэкенд строго валидирует типы. Тесты на инъекцию объектов в JSON-параметры — обязательная часть security-чека.

Частые ошибки

  • Доверять content-type и полагаться, что parser отработает безопасно.
  • Не валидировать поля по схеме.

Дополнительные вопросы

  • Что такое mass assignment?
  • Как защититься от NoSQL injection?

Что такое security headers и как их проверить?

Middle

Strict-Transport-Security (HSTS), Content-Security-Policy (CSP), X-Frame-Options, X-Content-Type-Options: nosniff, Referrer-Policy, Permissions-Policy.

Проверяют через DevTools или утилиты типа securityheaders.com.

Из практики: отсутствие — типовая находка пентеста. Подключают обычно через reverse proxy (nginx, Cloudflare) или middleware.

Частые ошибки

  • Не настраивать CSP — XSS оставляет полную свободу.
  • Включать строгий CSP без подготовки — поломает аналитику.

Дополнительные вопросы

  • Чем X-XSS-Protection устарел?
  • Что такое CSP report-only?

Какие сценарии тестировать на уязвимости загрузки файлов?

Middle

Тип: magic bytes vs расширение (PHP под видом jpg). Размер: 1ГБ загрузка. Имя: path traversal (../../etc/passwd), специальные символы.

Содержимое: SVG с JS, Word с макросами. Двойные расширения file.jpg.php. Серверная сторона: где хранится, выполняется ли как код.

Из практики: классическая уязвимость — загрузка web-shell на сервер с PHP/Java. Защита — хранить на отдельном домене, не выполнять, проверять magic bytes.

Частые ошибки

  • Полагаться только на проверку расширения на клиенте.
  • Не учитывать SVG/HTML с активным содержимым.

Дополнительные вопросы

  • Чем magic bytes лучше расширения?
  • Почему отдельный домен для загрузок?

Что такое rate limiting и как его тестировать?

Middle

Rate limiting ограничивает количество запросов от одного источника за время. Защищает от brute force, DDoS, бот-абуза.

Тестируют: 100 запросов за секунду — какой код? через какое время восстанавливается? применяется по IP, user, token? Обход через proxy/Tor?

Из практики: правильное rate limiting часто ставится на reverse proxy (nginx, Cloudflare) или API gateway. На уровне приложения — Redis-based счётчик.

Частые ошибки

  • Лимитить только по IP — пользователи за NAT страдают.
  • Не различать аутентифицированных и анонимных.

Дополнительные вопросы

  • Что такое token bucket?
  • Как обойти rate limit?

Что такое penetration test и чем отличается от security review?

Middle

Pentest — структурированная попытка взлома системы внешними или внутренними тестерами. Имитация атаки.

Security review — анализ кода, архитектуры, конфигурации на соответствие практикам безопасности. Без попытки эксплуатации.

Из практики: оба нужны. Review раз в квартал, pentest раз в год + перед мажорными релизами. Лучше — несколько pentest-команд для разнообразия взгляда.

Частые ошибки

  • Полагаться только на pentest — он находит конкретные дыры, но не системные проблемы.
  • Не следить за исполнением рекомендаций.

Дополнительные вопросы

  • Что такое red team / blue team?
  • Чем black-box pentest отличается от white-box?

Что такое OAuth scopes и audience?

Middle

Scope — это permissions, которые запрашивает Client от Resource Owner: read:profile, write:posts. User соглашается на конкретные.

Audience (aud) — кому предназначен токен. Защищает от подделки: токен для одного API не сработает на другом.

Из практики: scope позволяет minimum privilege (запрашивать только нужное). Тестируют: соответствует ли поведение scope, обработка отказа в части прав.

Частые ошибки

  • Запрашивать слишком много scopes — пользователь отказывается.
  • Не проверять audience и принимать любые валидные токены.

Дополнительные вопросы

  • Что такое incremental authorization?
  • Чем JWT audience полезен?

Чем отличаются аутентификация, авторизация и идентификация?

Junior

Идентификация — «кто ты говоришь, что есть» (логин, email). Аутентификация — проверка, что ты действительно тот (пароль, токен, биометрия, 2FA). Авторизация — что тебе разрешено делать (доступ к ресурсу, операции).

Последовательность: идентификация → аутентификация → авторизация. Без аутентификации авторизация бессмысленна.

Из практики: путаница ведёт к 401 vs 403 ошибкам, неправильным сообщениям пользователю и архитектурным дырам.

Частые ошибки

  • Путают идентификацию и аутентификацию.
  • Реализуют авторизацию через «есть токен — значит, можно всё».

Дополнительные вопросы

  • Что такое SSO?
  • Какие модели авторизации знаешь (RBAC, ABAC, ReBAC)?

Какие методы аутентификации знаешь (Basic, JWT, OAuth 2.0, OIDC, API key, mTLS)?

Middle

Basic Auth — логин/пароль в Base64 в заголовке. Простая, но небезопасная без HTTPS, нет ротации. API key — статичный ключ в заголовке/query. Простой, но не подходит для пользовательских сценариев. JWT — самодостаточный токен (header.payload.signature), не требует серверного состояния. OAuth 2.0 — фреймворк делегированной авторизации (вход «через Google»). OIDC — слой identity поверх OAuth2 (стандартизированный id_token). mTLS — взаимная аутентификация через сертификаты, машинно-машинная.

Выбор зависит от сценария: межсервисное API — API key или mTLS. Пользовательский веб — OAuth2/OIDC. Внутренний микросервис — mTLS или JWT.

Из практики: JWT — самый перепутанный. Это формат токена, а не механизм аутентификации. JWT удобен в OAuth/OIDC, но не сам по себе.

Частые ошибки

  • Используют JWT без проверки signature.
  • Хранят JWT в localStorage — уязвимы для XSS.

Дополнительные вопросы

  • Чем Authorization Code отличается от Implicit Flow?
  • Где хранить refresh-token?

Что такое шифрование данных? В чём разница симметричного и асимметричного?

Middle

Шифрование — преобразование данных так, что прочитать может только тот, у кого есть ключ. Симметричное — один и тот же ключ для шифрования и расшифровки (AES). Быстро, но проблема — как безопасно передать ключ.

Асимметричное — пара ключей (публичный/приватный). Шифруют публичным, расшифровывают приватным. RSA, ECC. Медленнее, но решает проблему обмена ключами.

Из практики: чаще всего используют гибрид. TLS handshake — асимметричное, чтобы согласовать сессионный ключ, потом весь трафик — симметричное. Получаем скорость + безопасный обмен.

Частые ошибки

  • Шифруют большие объёмы асимметричным алгоритмом — медленно.
  • Используют устаревшие алгоритмы (DES, RC4).

Дополнительные вопросы

  • Чем отличаются AES-128, AES-256?
  • Что такое key exchange Diffie-Hellman?

Что такое хэширование и чем отличается от шифрования?

Middle

Хэширование — одностороннее преобразование данных в строку фиксированной длины (хэш). Из хэша нельзя восстановить исходные данные. Изменение байта — изменение хэша.

Отличие от шифрования: шифрование обратимо (есть расшифровка), хэширование — нет. Используется для проверки целостности (checksums), хранения паролей (bcrypt, argon2), индексации, цифровых подписей.

Из практики: пароли хранят как хэш с солью и кост-фактором (bcrypt/argon2), не как MD5/SHA1. MD5/SHA1 устарели для безопасности — но годятся для checksum.

Частые ошибки

  • Хэшируют пароли через MD5/SHA1 без соли.
  • Путают «зашифровать пароль» и «захэшировать пароль» — это разные вещи.

Дополнительные вопросы

  • Что такое salt и pepper в хэшировании паролей?
  • Чем bcrypt отличается от argon2?

Что такое SQL-инъекция и как от неё защититься?

Middle

SQL-инъекция — внедрение SQL-кода через входные данные приложения. Пример: вместо `SELECT * FROM users WHERE name = 'Иван'` получается `SELECT * FROM users WHERE name = '' OR 1=1 --'`, и злоумышленник видит всех.

Защита: 1) параметризованные запросы (placeholder, prepared statements) — главное правило; 2) ORM с правильным использованием; 3) валидация и whitelist входных данных; 4) принцип наименьших привилегий БД-юзера; 5) WAF как дополнительный слой.

Из практики: 99% инъекций ловятся параметризованными запросами. Конкатенация SQL-строки в коде — почти всегда уязвимость.

Частые ошибки

  • Используют escape вместо параметризации — есть способы обхода.
  • Полагаются на frontend-валидацию — её всегда можно обойти.

Дополнительные вопросы

  • Что такое blind SQL injection?
  • Какие инструменты автоматизированной проверки знаешь (sqlmap, OWASP ZAP)?