Skip to content

Вопросы на собеседовании: Инженер по безопасности приложений

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Middle.

Смотреть пример резюме: Инженер по безопасности приложений

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

Я прослеживаю значение через границы вызовов и отмечаю, где его свойства безопасности действительно меняются.

  • Начинаю с конкретного источника, например Express `req.query`, и иду через возвращаемые значения, параметры, поля, обратные вызовы и псевдонимы до опасной операции вроде `db.query` или `child_process.exec`.
  • Проверяю реализацию обёрток, а не доверяю названиям: `runSafeQuery` всё ещё может соединять строку перед вызовом драйвера базы данных.
  • Использую граф вызовов или запрос пути CodeQL для подтверждения межпроцедурного маршрута, а затем проверяю, может ли каждый найденный путь действительно выполниться.
  • Добавляю целевой тест с управляемым атакующим вводом и безопасный парный случай, чтобы подтвердить, какая ветка достигает опасной операции и меняет ли значение предполагаемый санитайзер.

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

htmlsql

Я отдельно отслеживаю недоверенные данные для каждого контекста, потому что преобразование, безопасное для одной опасной операции, может быть непригодно для другой.

  • Источниками служат HTTP-параметры, сообщения и исходно введённые пользователями значения из базы данных; выполнение SQL, вывод HTML и запуск процессов образуют разные классы опасных операций.
  • Привязка параметров защищает только позиции значений SQL, а кодирование HTML только конкретный контекст вывода; ни одно из них не делает строку безопасной для командной оболочки.
  • Я моделирую распространение через коллекции, свойства объектов, конструкторы и вспомогательные функции фреймворка, чтобы отметка не терялась на обычных абстракциях приложения.
  • До включения модели в CI добавляю негативные тесты безопасных потоков и позитивные тесты для каждой пары источника и опасной операции.

Зачем это спрашивают: Сильный ответ рассматривает недоверенность как контекстное свойство данных и объясняет, как сохранить полноту и точность модели.

validationsast

Я считаю вспомогательную функцию санитайзером, только если её контракт устраняет конкретную возможность эксплуатации в целевой опасной операции.

  • Проверка `isUUID` может ограничить путь или идентификатор, но не очищает исходную строку для HTML или командной строки.
  • Я читаю реализацию с учётом Unicode, декодирования, длины и поведения при ошибке и убеждаюсь, что вызывающий код использует проверенное возвращаемое значение, а не исходный ввод.
  • Предпочитаю типизированное преобразование вроде `parseTenantId(): TenantId` булевой проверке, потому что безопасное значение сложнее случайно отбросить.
  • Регрессионные тесты включают варианты обхода и доказывают, что поток недоверенных данных прерывается только на нужной ветке.

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

Я полагаюсь на автоматическое экранирование только в документированном контексте вывода и отслеживаю все способы его отключения.

  • Подстановка текста в React и HTML-шаблоны Jinja обычно кодирует HTML, но `dangerouslySetInnerHTML`, фильтр Jinja `safe` и сырые блоки снимают эту защиту.
  • Кодирования HTML-текста недостаточно внутри JavaScript, CSS или URL, поэтому там нужны предназначенные для контекста API или строгие белые списки.
  • Значение после серверного рендеринга может привести к DOM XSS, если клиентский код передаст его в `innerHTML`, `insertAdjacentHTML` или небезопасный сторонний компонент.
  • Я проверяю конфигурацию шаблонизатора и пользовательские фильтры: глобальное отключение экранирования превращает гарантию фреймворка в недоказанное предположение для всего приложения.

Зачем это спрашивают: Вопрос проверяет понимание контекстного кодирования и границ стандартной защиты фреймворка.

code-review

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

  • Изменения маршрутов, схем, авторизации, сериализаторов, шаблонов, запросов, файловой системы и исходящих обращений проверяю раньше механических рефакторингов и сгенерированных файлов.
  • Прослеживаю один полный запрос от точки входа до побочного эффекта и сравниваю новый путь с принятым способом аутентификации и изоляции арендаторов.
  • Проверяю удалённые проверки и изменённые значения по умолчанию в diff, затем изучаю blame и соседний код, если изменение опирается на неявный инвариант.
  • Запрашиваю целевые тесты отказа в авторизации, некорректного ввода и граничных случаев, а не одобряю код только по успешным сценариям.

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

code-reviewapijavascript

Я уделяю внимание API, которые повторно интерпретируют строки как код, разметку, пути, запросы или команды.

  • `eval`, `Function`, таймеры со строками и `vm.runInNewContext` являются точками выполнения кода, даже если ввод сначала прошёл разбор JSON.
  • `child_process.exec`, `execSync` и `{ shell: true }` запускают командную оболочку; `spawn` или `execFile` с фиксированной программой и массивом аргументов исключают её разбор.
  • `innerHTML`, `insertAdjacentHTML` и React `dangerouslySetInnerHTML` требуют очистки для конкретного контекста, например по строго настроенной политике DOMPurify.
  • Динамический `require`, пути файловой системы и слияние объектов требуют белых списков или канонизации, поскольку могут привести к обходу каталогов и загрязнению прототипа.

Зачем это спрашивают: Сильный ответ называет конкретные API JavaScript и связывает каждый из них с создаваемой границей интерпретации.

injectionrisk-managementapi

Я проверяю API Java, которые вычисляют выражения, строят запросы, десериализуют объекты или запускают процессы операционной системы.

  • `Runtime.exec(String)` сам по себе не запускает командную оболочку: он разбивает строку на имя программы и аргументы, поэтому метасимволы оболочки не получают особого смысла. Однако управление именем программы или параметрами всё равно позволяет подменять запускаемый процесс и внедрять опасные аргументы.
  • `new ProcessBuilder("sh", "-c", value)` явно запускает оболочку и допускает командную инъекцию, если `value` не доверен. Вместо этого я задаю фиксированную программу, передаю аргументы отдельно и разрешаю только ожидаемые параметры.
  • Конкатенация в `Statement.execute` создаёт SQL-инъекцию; `PreparedStatement` защищает значения, но не параметризует имена таблиц и направления сортировки.
  • Вычисление SpEL, OGNL, шаблонов и скриптов, а также `ObjectInputStream` для недоверенных байтов могут привести к выполнению кода, поэтому такие пути нужно устранять или жёстко ограничивать.

Зачем это спрашивают: Интервьюер проверяет, различает ли кандидат разбор аргументов в Java и явный запуск командной оболочки, а также знает другие характерные для языка опасные API.

code-reviewapipython

Я отмечаю API Python, которые десериализуют объекты, вычисляют выражения, запускают командную оболочку или строят пути и запросы из строк.

  • `pickle.loads`, `marshal.loads` и небезопасный `yaml.load` могут создавать выбранные атакующим объекты; для обычных данных лучше JSON или `yaml.safe_load`.
  • `eval`, `exec` и динамический импорт выполняют код, а `subprocess.run(..., shell=True)` добавляет интерпретацию метасимволов командной оболочки.
  • SQL через f-строку остаётся уязвимым; плейсхолдеры DB-API должны передавать значения, а идентификаторы выбираются из белого списка или собираются SQL-конструктором драйвера.
  • Извлечение через `tarfile` или `zipfile` и объединение путей через `pathlib` требуют проверки, что итоговый путь остаётся внутри целевого каталога.

Зачем это спрашивают: Интервьюер ожидает конкретные опасные API Python и более безопасные альтернативы, а не общий совет проверять ввод.

vulnerabilitiesrace-conditiondesign

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

  • `realpath` перед `open` всё ещё оставляет окно гонки, если другой процесс может изменить проверенный путь.
  • В Linux я предпочитаю операции относительно файлового дескриптора, например `openat` с `O_NOFOLLOW`, доверенным дескриптором каталога и строгими правами и владельцем.
  • Авторизацию и работу с файлом выполняю через один открытый дескриптор, а результат публикую атомарным `rename`, не разрешая путь повторно.
  • Временные файлы создаю через `mkstemp` или аналогичный API с исключительным созданием, а не по предсказуемому имени после предварительного `exists`.

Зачем это спрашивают: Вопрос проверяет понимание того, что канонизация сама по себе не делает многошаговую операцию с файлами атомарной.

authidentity-access

Проверка безопасности может устареть, если параллельный запрос изменит защищённое состояние до фиксации записи.

  • Два запроса на погашение купона могут оба увидеть `used = false` и использовать один купон дважды, если проверка и обновление выполняются раздельно.
  • Я закрепляю инвариант в одном условном обновлении, уникальном ограничении или транзакции с нужной блокировкой строки и принимаю только победивший результат.
  • Если авторизация зависит от изменяемого членства, проверка политики и чувствительное изменение должны выполняться в одной транзакции или доверенной операции базы данных.
  • Ключи идемпотентности останавливают повторные попытки одного запроса, но не заменяют блокировки и ограничения для разных запросов к одному ресурсу.

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

ssrf

Я ограничиваю весь жизненный цикл исходящего запроса, а не только полученный от пользователя текст URL.

  • Использую одну выбранную библиотеку разбора URL, разрешаю только `http` и `https`, запрещаю учётные данные и необычные числовые записи IP-адресов, а перед подключением получаю через DNS и проверяю все адреса назначения.
  • Сетевой уровень блокирует адреса обратной петли, локальные адреса канала, диапазоны RFC 1918 и локальные диапазоны IPv6, адреса метаданных облака и запрещённые порты, в том числе после повторного разрешения DNS.
  • Перенаправления отключены либо каждая новая цель проходит ту же проверку; размер ответа, время ожидания и число перенаправлений ограничены.
  • Компоненты с высоким риском работают через прокси исходящего трафика или в изолированной сети, где белый список делает внутренние сервисы недоступными по архитектуре.

Зачем это спрашивают: Сильный ответ учитывает неоднозначный разбор URL, DNS, перенаправления и ограничения сети, а не предлагает хрупкий чёрный список строк.

sqlqueriesorm

Я нахожу места, где типизированное построение запроса сменяется сырым SQL, и определяю, какие части строки снова влияют на структуру запроса.

  • Такие API, как SQLAlchemy `text`, Prisma `$queryRawUnsafe`, Knex `raw`, нативные запросы Hibernate и строковый `orderBy`, требуют проверки как точки выполнения SQL, даже если остальной код использует ORM.
  • Плейсхолдеры связывают только значения. Имена таблиц и столбцов, операторы, направления сортировки и фрагменты SQL должны выбираться из фиксированных соответствий или собираться безопасным API.
  • Я проверяю обёртки и поведение шаблонных строк: одни API параметризуют подставленные значения, а другие с похожими именами соединяют строки напрямую.
  • В тестах передаю метасимволы как значения и неожиданные варианты идентификаторов, затем проверяю сформированный SQL и результат, чтобы данные не могли изменить структуру запроса.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат точно найти место, где заканчиваются структурные гарантии ORM.

redos

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

  • Вложенные или пересекающиеся квантификаторы, неоднозначные альтернативы и повторяемые группы перед несовпадающим окончанием служат тревожными признаками. Якоря сами по себе не делают поиск линейным.
  • Перед поиском я ограничиваю длину строки, а неоднозначные выражения заменяю простым разбором, ограниченными квантификаторами или движком с линейным временем, например RE2, если хватает его возможностей.
  • Регулярные выражения от пользователя запрещаю либо принимаю только ограниченный синтаксис и малый размер: успешная компиляция ещё не означает безопасное выполнение.
  • В регрессионные замеры добавляю специально подобранные строки, которые почти совпадают, и задаю предел времени. Изоляция процесса и тайм-ауты остаются дополнительной, а не основной защитой.

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

prototypesjavascriptprototype-pollution

Загрязнение прототипа возникает, когда управляемые атакующим пути к свойствам изменяют прототип объекта, а не только его собственные данные.

  • Рекурсивное слияние и функции задания пути должны запрещать `__proto__`, `prototype` и `constructor` на любой глубине, а не только на верхнем уровне.
  • Я обновляю уязвимые библиотеки слияния и предпочитаю копирование по схеме в явные DTO или словари без прототипа.
  • Код авторизации и конфигурации проверяет собственные свойства через `Object.hasOwn`, а не доверяет унаследованным значениям по умолчанию.
  • Тесты отправляют вложенный JSON и параметры строки запроса, а затем проверяют, что обычные объекты и решения по безопасности не изменились.

Зачем это спрашивают: Интервьюер ожидает объяснение как механизма загрязнения, так и превращения унаследованных свойств в уязвимость приложения.

configendpoints

Я привязываю запрос к строгой модели формы для конкретной операции и не передаю сущность JPA механизму веб-привязки.

  • В форме объявлены только редактируемые поля, `WebDataBinder.setAllowedFields` задаёт белый список на уровне фреймворка, а `setIgnoreUnknownFields(false)` запрещает стандартное молчаливое игнорирование неизвестных свойств.
  • Запрещённые поля лишь попадают в список подавленных, поэтому я отклоняю запрос при ошибках в `BindingResult` или непустом `getSuppressedFields()` и возвращаю 400 при сбое строгой привязки.
  • Сервис переносит проверенные значения в загруженную с учётом арендатора сущность, а владельца, роль и ID учётной записи получает из серверного контекста аутентификации, поэтому вложенный путь не может выбрать служебное состояние.
  • В MVC-тестах я отправляю служебные, неизвестные и вложенные имена вроде `roles[0]` и проверяю отказ вместе с отсутствием изменений в хранилище.

Зачем это спрашивают: Интервьюер проверяет знание реального поведения Spring для подавленных и неизвестных полей, а не только рекомендацию использовать белый список.

serialization

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

  • JSON, Protobuf или ограниченная схема CBOR переносят примитивы и объявленные сообщения без Java `ObjectInputStream`, Python pickle и активации имён типов .NET.
  • Я ограничиваю глубину вложенности, размеры коллекций и строк и общее число байтов, потому что даже безопасное создание объектов может исчерпать память или процессорное время.
  • HMAC подтверждает целостность и подлинность, но не делает опасный десериализатор безопасным при компрометации ключа подписи или доверенного отправителя.
  • Устаревшую нативную сериализацию изолирую за белым списком и границей миграции, а зависимости с цепочками гаджетов по возможности удаляю.

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

xxedesignconcurrency

Я отключаю DTD и любое разрешение внешних сущностей, затем проверяю эти настройки на конкретной версии используемого парсера.

  • Парсер не должен загружать внешние общие и параметрические сущности, схемы или ресурсы XSLT из сети и локальных файлов.
  • Я ограничиваю размер ввода, расширение сущностей, глубину вложенности и время обработки для защиты от отказа в обслуживании, например при экспоненциальном расширении сущностей.
  • Если формату нужна схема, она загружается из доверенного локального каталога, а не по URI из документа.
  • Регрессионный пример пытается прочитать локальный файл и обратиться к внешнему контрольному адресу, чтобы тест доказывал защиту, а не просто наличие флага.

Зачем это спрашивают: Интервьюер ожидает конкретные ограничения XML-парсера, включая внешние схемы и истощение ресурсов.

Я добиваюсь того, чтобы валидация, авторизация, проверка подписи и бизнес-логика работали с одним однозначным представлением запроса.

  • Повторяющиеся ключи объекта, числа вне допустимого диапазона, бесконечность и NaN, некорректный Unicode и чрезмерная вложенность отклоняются до того, как шлюз и приложение смогут истолковать их по-разному.
  • Схема проверяет то же разобранное значение, которое затем использует бизнес-логика. Нельзя проверять исходный текст одним компонентом, а потом заново разбирать его другой библиотекой.
  • Если протокол подписывает канонический JSON, все отправители и проверяющие используют одинаковые документированные правила канонизации. В остальных случаях подпись проверяется по точным исходным байтам до разбора.
  • Набор проверочных примеров проводит неоднозначные данные через реальные парсеры шлюза и приложения и подтверждает одинаковый отказ без побочных изменений.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат устранить неоднозначность, когда один путь в коде защищают несколько парсеров.

concurrency

Я считаю декодер и каждый производный артефакт частью обработки недоверенных данных в изолированном конвейере.

  • Сервис проверяет сигнатуру файла и декодирует изображение обновлённой библиотекой, затем повторно кодирует его в поддерживаемый формат, не сохраняя управляемые атакующим метаданные или полиглотное содержимое.
  • До создания миниатюры ограничиваю число пикселей, размеры, число кадров, память после распаковки, процессорное время и размер результата.
  • Обработка запускается без прав root в песочнице без сети, с файловой системой только для чтения и новой временной директорией.
  • Оригиналы и результаты хранятся под случайными ключами в закрытом хранилище, а при скачивании задаются фиксированный тип содержимого и `Content-Disposition` без определения типа браузером.

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

ci-cd

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

  • Каждое имя нормализуется и разрешается внутри целевой директории; абсолютные пути, выход к родительскому каталогу, символические и жёсткие ссылки, устройства и дубли нормализованных имён отклоняются.
  • Ограничения охватывают число записей, размер отдельного файла и всего распакованного содержимого, коэффициент сжатия, вложенность и время обработки, чтобы остановить архивные бомбы.
  • Для извлечения использую безопасные API библиотеки и запись относительно дескриптора, после чего непривилегированный обработчик без сети разбирает только разрешённые типы файлов.
  • Ничего не публикую до полного успеха импорта, а при любой ошибке удаляю частичный результат.

Зачем это спрашивают: Сильный ответ учитывает выход за пределы каталога, злоупотребление распаковкой, специальные записи, цепочку парсеров и атомарную публикацию.

Закрытые вопросы

  • 21

    Как предотвратить обход авторизации из-за порядка и композиции маршрутов и middleware в Express?

    authidentity-accessmiddleware
  • 22

    Чем различаются задачи параметров `state` и `nonce` при входе через OpenID Connect?

    identity-accesscryptographyoidc
  • 23

    Как сервер ресурсов должен применять ограниченные по отправителю токены доступа OAuth с DPoP, включая защиту от повтора и обработку nonce?

    oauthtokensidentity-access
  • 24

    Как предотвратить подмену алгоритма и путаницу ключей JWT в коде приложения?

    jwtalgorithms
  • 25

    Как спроектировать жизненный цикл сеанса с доступом к чувствительным данным?

    sessionsdesign
  • 26

    Что должно проверять приложение при регистрации и аутентификации через WebAuthn?

    authidentity-accesswebauthn
  • 27

    В приложении для совместной работы есть роли организации, общий доступ к документам и региональные ограничения. Как составить для него политику авторизации?

    authidentity-access
  • 28

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

    authidentity-access
  • 29

    Как задать каноническое представление запроса для подписи API, не создав обходов проверки?

    api
  • 30

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

    authidentity-accessrest
  • 31

    Как смоделировать угрозы функции добавления нового ключа доступа в учётную запись пользователя?

    threat-modeling
  • 32

    Как смоделировать угрозы ссылок-приглашений в многоарендаторском SaaS-приложении?

    multi-tenancythreat-modelingcloud
  • 33

    Как применить STRIDE и сценарии злоупотребления к массовому импорту пользователей из CSV?

    stride
  • 34

    Как смоделировать угрозы функции, которая отправляет исходящие вебхуки на заданные клиентами URL?

    threat-modelingwebhooksconfig
  • 35

    Как смоделировать угрозы приватного обмена файлами по ссылкам с ограниченным сроком действия?

    threat-modeling
  • 36

    Как смоделировать угрозы при смене основного адреса электронной почты учётной записи?

    threat-modeling
  • 37

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

    tokensconcurrencythreat-modeling
  • 38

    Как смоделировать угрозы GraphQL-бэкенда для фронтенда, который объединяет несколько внутренних сервисов?

    graphqlgraphql-authorizationaggregation
  • 39

    Как смоделировать угрозы асинхронного экспорта клиентских данных через объектное хранилище?

    threat-modelingasync
  • 40

    Как смоделировать угрозы ИИ-ассистента, способного вызывать инструменты приложения от имени пользователя?

    threat-modeling
  • 41

    Как спроектировать правило анализа потоков данных Semgrep для собственной SQL-обёртки проекта?

    sqldesignsemgrep
  • 42

    Когда для собственного правила Semgrep можно безопасно предлагать автоматическое исправление?

    semgrep
  • 43

    Как описать собственный фреймворк в запросе анализа потоков данных CodeQL?

    queriescodeql
  • 44

    Как повысить точность запроса безопасности CodeQL, не скрыв реальные уязвимости?

    queriesvulnerabilitiescodeql
  • 45

    SAST обнаружил уязвимость в генерируемом коде, который перезаписывается при каждой сборке. Как найти место для исправления и не скрыть проблему подавлением?

    vulnerabilitiessast
  • 46

    Как достижимость уязвимого кода по данным SCA должна влиять на приоритет уязвимостей зависимостей?

    dependenciesscavulnerabilities
  • 47

    Как артефакты SBOM и VEX дополняют друг друга при реагировании на уязвимости?

    artifactssbomvex
  • 48

    Какие гарантии для цепочки поставки приложения дают подписанные сборки и сведения об их происхождении?

  • 49

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

    regressionsecurity-regressionownership
  • 50

    Как использовать OWASP ASVS для определения и проверки требований к релизу приложения?

    owaspasvs
  • 51

    Конструктор отчётов на Python безопасно сохраняет пользовательский фильтр, но затем подставляет его конкатенацией в SQLAlchemy `text`; как вы проследите и исправите SQL-инъекцию второго порядка?

    sqlqueriesorm
  • 52

    Сервис предпросмотра URL на Node.js проверяет первый ответ DNS, следует по пяти редиректам через undici и обращается к 169.254.169.254. Как устранить SSRF через редиректы и DNS rebinding?

    validationssrfdns
  • 53

    Java API принимает base64-поле `preferences`, а в Jackson включён default typing; тестовая нагрузка создаёт неожиданный класс, как вы исправите путь десериализации?

    api
  • 54

    Worker импорта на Go использует `archive/zip` и соединяет имя каждой записи с `/tmp/import`; как вы исправите архив, который пишет через `../../` и symlink-запись?

    joins
  • 55

    Эндпоинт предпросмотра писем на Flask передаёт редактируемый пользователем шаблон в `render_template_string`, а `{{ config.items() }}` раскрывает секреты; как вы проследите и исправите SSTI?

    secretsinjectionconfig
  • 56

    Java-сервис скачивания записывает сохранённое имя файла в сырой заголовок `Content-Disposition`, и имя с CRLF создаёт второй заголовок ответа. Как проследить и исправить response splitting?

    tracing
  • 57

    Эндпоинт видео на FastAPI строит `ffmpeg -i {filename} {output}` и вызывает `subprocess.run(..., shell=True)`; как исправить многошаговую command injection, не сломав необычные имена файлов?

    injectionendpointsframeworks
  • 58

    Консоль поддержки на React очищает Markdown перед сохранением, но последующий admin-экспорт заново разбирает исходный Markdown через `dangerouslySetInnerHTML`; как вы исправите цепочку stored XSS?

    reactreact-xssxss
  • 59

    Сервис документов на Spring разбирает загруженные SVG через стандартный `DocumentBuilderFactory`, а тестовая entity читает `/etc/hostname`; как вы исправите XXE?

    xxe
  • 60

    Маршрут скачивания Express декодирует `req.params.name` перед передачей в helper, который декодирует снова, поэтому проходит `%252e%252e%252f`; как вы проследите и исправите traversal?

    tracing
  • 61

    API денежных переводов принимает сессию только с паролем, хотя веб-интерфейс требует недавнюю MFA. Какие данные трафика и кода вы соберёте для поиска пропущенной проверки повышения уровня аутентификации?

    passwordssessionsidentity-access
  • 62

    API на Go принимает токен с `alg: HS256`, хотя production выпускает JWT с RS256; как вы докажете и исправите путаницу verifier?

    tokensapi
  • 63

    После деплоя Rails два одновременных login-запроса иногда оставляют валидным ID сессии до входа; как вы отладите и исправите гонку ротации?

    sessionsdeploymentconcurrency
  • 64

    API с credentials отражает `Origin`, если он соответствует `/example.com$/`, и Burp успешно обращается с `evil-example.com`; как вы отладите и исправите CORS?

    corsappsec-tools
  • 65

    CSP-отчёты показывают, что кешированная HTML-страница повторно использует nonce другого ответа, а внедрённый script выполняется только при cache hit; как вы диагностируете и исправите это?

    htmlcachingcryptography
  • 66

    GraphQL DataLoader кеширует `userById` глобально, а traces показывают выдачу tenant B объекта, впервые загруженного tenant A; как вы локализуете и исправите ошибку авторизации?

    authidentity-accessgraphql
  • 67

    Подписи webhook Stripe начали ошибаться после изменения Express middleware, а повторные события иногда создают дубли кредитов; как вы отладите обе проблемы?

    middlewarewebhooks
  • 68

    Фоновый PDF-экспорт возвращает счета другого tenant, хотя запускающий REST-эндпоинт проверяет ownership; как вы проследите broken object authorization?

    authidentity-accessrest
  • 69

    SPA успешно обновляет сессии, но украденный старый refresh token тоже работает в течение 30 секунд; как вы отладите ротацию token family?

    tokenssessions
  • 70

    Регрессия CSRF возникает только когда форма оплаты после frontend-рефакторинга использует `fetch`; как вы найдёте её по браузерному трафику и серверному коду?

    csrfforms
  • 71

    Как написать и настроить модели Semgrep для данных Express, которые доходят до внутренней обёртки `runTool` над `child_process.spawn`?

    semgrep
  • 72

    В Express-сервисе маршруты появляются быстрее тестов авторизации, и CI пропустил новый административный endpoint, которого не было в ручном списке. Как построить проверку покрытия политиками маршрутов?

    authidentity-accesscoverage
  • 73

    В сервисе на Prisma регулярно появляются запросы `findUnique({ where: { id } })` к моделям арендаторов. Как добавить в CI проверку с учётом схемы и не отмечать глобальные таблицы?

    schema
  • 74

    После обновления генератора protobuf некорректные денежные значения доходят до обработчика Go, потому что аннотации валидации больше не создаются. Как сделать так, чтобы CI обнаруживал такую регрессию?

    validationgeneratorsci-cd
  • 75

    IAST agent не видит tainted path в checkout-сервисе Spring, хотя ручной тест подтверждает injection; как вы улучшите pipeline?

    injectionci-cd
  • 76

    Semgrep выдаёт 900 XSS findings в сгенерированных React API clients, но подтверждены только 6 проблем в ручных компонентах; как ответственно снизить шум?

    reactcomponentsapi
  • 77

    Собственное правило Semgrep для Flask SSTI имеет precision 94%, но пропустило два исторических инцидента; как вы построите regression suite перед enforcement?

    incidentsframeworksregression
  • 78

    Security хочет понять полезность нового CodeQL query после сканирования 30 репозиториев; какие false-positive metrics и метод выборки вы примените?

    monitoringcodeqlqueries
  • 79

    Проверка безопасности монорепозитория должна укладываться в восемь минут, но сканирование только изменённых файлов пропускает потоки через общие пакеты TypeScript. Как настроить CI?

    monorepoci-cdtypescript
  • 80

    Приложение Next.js применяет Trusted Types, но плагин продакшен-сборки добавляет опасные операции с DOM, которых не видят проверки исходного кода. Как поставить проверку на собранный фронтенд?

    domnextjstrusted-types
  • 81

    Продукт заменяет пароли входом по magic link из письма и добавляет восстановление учётной записи через поддержку. Как построить модель угроз изменения?

    passwordsthreat-modeling
  • 82

    GitHub App будет анализировать репозитории клиентов и автоматически открывать pull request с исправлениями безопасности. Какие угрозы и критерии выпуска вы определите?

    code-review
  • 83

    SaaS-продукт позволит клиентам настраивать исходящие webhook с собственными заголовками и десятью повторными попытками. Как предотвратить внедрение заголовков и утечку учётных данных?

    configcloudwebhooks
  • 84

    Десктопный продукт добавляет сторонние плагины JavaScript, которые могут читать данные проекта и вызывать API. Как построить модель угроз и минимальную песочницу?

    threat-modelingdesignapi
  • 85

    Мультиарендаторный сервис наблюдаемости позволит клиентам задавать правила на регулярных выражениях для сокрытия данных и маршрутизации каждого входящего события. Как построить модель угроз этого потока?

    multi-tenancythreat-modelingobservability
  • 86

    Мобильный банковский app добавляет universal links для подтверждения платежа и fallback на custom scheme; как вы проверите изменение?

  • 87

    HR SaaS добавляет подготовку учётных записей по SCIM 2.0, а клиенты смогут настраивать сопоставление групп с ролями. Как построить модель угроз до запуска?

    threat-modelingcloud
  • 88

    Приложение для управления проектами позволяет гостям открыть общий проект по паролю и при необходимости оставлять комментарии. Как защитить возможность комментирования?

    passwords
  • 89

    SaaS-маркетплейс позволит пользователям устанавливать сторонние OAuth-приложения, которые читают данные рабочего пространства и публикуют сообщения. Как построить модель угроз установки и согласия?

    oauthidentity-accessdependencies
  • 90

    CRM добавляет двустороннюю синхронизацию контактов со сторонним OAuth-провайдером и входящие callbacks изменений; как вы построите threat model интеграции?

    oauthidentity-accesscallbacks
  • 91

    Отчёт в HackerOne заявляет захват учётной записи через сброс пароля, но содержит только снимки экрана без последовательности запросов. Как вы проведёте первичный разбор?

    passwords
  • 92

    Пять bounty reports описывают IDOR в invoice view, PDF download, email resend, export и mobile API; как вы определите duplicates и root-cause groups?

    api
  • 93

    Stored XSS требует роль workspace editor, но выполняется в браузере billing administrator; как вы объедините CVSS и business impact?

    xssvuln-management
  • 94

    Bounty report находит SSRF в image import, а code search обнаруживает тот же helper `fetchRemote` в трёх функциях; как вы скоординируете remediation?

    ssrf
  • 95

    Исследователь планирует опубликовать SSTI report через 14 дней, а product team оценивает безопасную миграцию renderer в 10 дней; как вы скоординируете disclosure и remediation?

    estimationmigrations
  • 96

    Product owner просит 45-дневное исключение для high-confidence CodeQL finding по command injection, потому что замена библиотеки срывает launch date; что вы потребуете?

    injectionerror-handlingcodeql
  • 97

    Три команды регулярно добавляют небезопасную загрузку URL вопреки review guidance; какое developer enablement вы выпустите?

  • 98

    Bounty report показал, что два синхронных вывода средств дважды расходуют один баланс, а команда добавила ключ идемпотентности. Какие доказательства нужны перед закрытием?

    idempotencyclosures
  • 99

    Два researchers сообщают разные exploit chains, которые заканчиваются выполнением admin template; как вы оцените и исправите их, не потеряв детали цепочек?

    attacks
  • 100

    После закрытия обхода подписи webhook как вы превратите remediation в практическое enablement продуктовой команды?

    webhooks