Вопросы на собеседовании: Инженер по безопасности приложений
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Middle.
Смотреть пример резюме: Инженер по безопасности приложений →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
Я прослеживаю значение через границы вызовов и отмечаю, где его свойства безопасности действительно меняются.
- Начинаю с конкретного источника, например Express `req.query`, и иду через возвращаемые значения, параметры, поля, обратные вызовы и псевдонимы до опасной операции вроде `db.query` или `child_process.exec`.
- Проверяю реализацию обёрток, а не доверяю названиям: `runSafeQuery` всё ещё может соединять строку перед вызовом драйвера базы данных.
- Использую граф вызовов или запрос пути CodeQL для подтверждения межпроцедурного маршрута, а затем проверяю, может ли каждый найденный путь действительно выполниться.
- Добавляю целевой тест с управляемым атакующим вводом и безопасный парный случай, чтобы подтвердить, какая ветка достигает опасной операции и меняет ли значение предполагаемый санитайзер.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат рассуждать за пределами одной функции и отличать название от реальных гарантий потока данных.
Я отдельно отслеживаю недоверенные данные для каждого контекста, потому что преобразование, безопасное для одной опасной операции, может быть непригодно для другой.
- Источниками служат HTTP-параметры, сообщения и исходно введённые пользователями значения из базы данных; выполнение SQL, вывод HTML и запуск процессов образуют разные классы опасных операций.
- Привязка параметров защищает только позиции значений SQL, а кодирование HTML только конкретный контекст вывода; ни одно из них не делает строку безопасной для командной оболочки.
- Я моделирую распространение через коллекции, свойства объектов, конструкторы и вспомогательные функции фреймворка, чтобы отметка не терялась на обычных абстракциях приложения.
- До включения модели в CI добавляю негативные тесты безопасных потоков и позитивные тесты для каждой пары источника и опасной операции.
Зачем это спрашивают: Сильный ответ рассматривает недоверенность как контекстное свойство данных и объясняет, как сохранить полноту и точность модели.
Я считаю вспомогательную функцию санитайзером, только если её контракт устраняет конкретную возможность эксплуатации в целевой опасной операции.
- Проверка `isUUID` может ограничить путь или идентификатор, но не очищает исходную строку для HTML или командной строки.
- Я читаю реализацию с учётом Unicode, декодирования, длины и поведения при ошибке и убеждаюсь, что вызывающий код использует проверенное возвращаемое значение, а не исходный ввод.
- Предпочитаю типизированное преобразование вроде `parseTenantId(): TenantId` булевой проверке, потому что безопасное значение сложнее случайно отбросить.
- Регрессионные тесты включают варианты обхода и доказывают, что поток недоверенных данных прерывается только на нужной ветке.
Зачем это спрашивают: Интервьюер ожидает, что санитайзер в модели будет привязан к явному контракту безопасности, а не к удобному имени функции.
Я полагаюсь на автоматическое экранирование только в документированном контексте вывода и отслеживаю все способы его отключения.
- Подстановка текста в React и HTML-шаблоны Jinja обычно кодирует HTML, но `dangerouslySetInnerHTML`, фильтр Jinja `safe` и сырые блоки снимают эту защиту.
- Кодирования HTML-текста недостаточно внутри JavaScript, CSS или URL, поэтому там нужны предназначенные для контекста API или строгие белые списки.
- Значение после серверного рендеринга может привести к DOM XSS, если клиентский код передаст его в `innerHTML`, `insertAdjacentHTML` или небезопасный сторонний компонент.
- Я проверяю конфигурацию шаблонизатора и пользовательские фильтры: глобальное отключение экранирования превращает гарантию фреймворка в недоказанное предположение для всего приложения.
Зачем это спрашивают: Вопрос проверяет понимание контекстного кодирования и границ стандартной защиты фреймворка.
Сначала я отмечаю изменившиеся границы доверия, затем сосредотачиваюсь на коде, который переносит или интерпретирует недоверенные данные.
- Изменения маршрутов, схем, авторизации, сериализаторов, шаблонов, запросов, файловой системы и исходящих обращений проверяю раньше механических рефакторингов и сгенерированных файлов.
- Прослеживаю один полный запрос от точки входа до побочного эффекта и сравниваю новый путь с принятым способом аутентификации и изоляции арендаторов.
- Проверяю удалённые проверки и изменённые значения по умолчанию в diff, затем изучаю blame и соседний код, если изменение опирается на неявный инвариант.
- Запрашиваю целевые тесты отказа в авторизации, некорректного ввода и граничных случаев, а не одобряю код только по успешным сценариям.
Зачем это спрашивают: Интервьюер оценивает, умеет ли кандидат расставлять приоритеты проверки и при этом прослеживать конкретный сквозной путь данных.
Я уделяю внимание API, которые повторно интерпретируют строки как код, разметку, пути, запросы или команды.
- `eval`, `Function`, таймеры со строками и `vm.runInNewContext` являются точками выполнения кода, даже если ввод сначала прошёл разбор JSON.
- `child_process.exec`, `execSync` и `{ shell: true }` запускают командную оболочку; `spawn` или `execFile` с фиксированной программой и массивом аргументов исключают её разбор.
- `innerHTML`, `insertAdjacentHTML` и React `dangerouslySetInnerHTML` требуют очистки для конкретного контекста, например по строго настроенной политике DOMPurify.
- Динамический `require`, пути файловой системы и слияние объектов требуют белых списков или канонизации, поскольку могут привести к обходу каталогов и загрязнению прототипа.
Зачем это спрашивают: Сильный ответ называет конкретные API JavaScript и связывает каждый из них с создаваемой границей интерпретации.
Я проверяю API Java, которые вычисляют выражения, строят запросы, десериализуют объекты или запускают процессы операционной системы.
- `Runtime.exec(String)` сам по себе не запускает командную оболочку: он разбивает строку на имя программы и аргументы, поэтому метасимволы оболочки не получают особого смысла. Однако управление именем программы или параметрами всё равно позволяет подменять запускаемый процесс и внедрять опасные аргументы.
- `new ProcessBuilder("sh", "-c", value)` явно запускает оболочку и допускает командную инъекцию, если `value` не доверен. Вместо этого я задаю фиксированную программу, передаю аргументы отдельно и разрешаю только ожидаемые параметры.
- Конкатенация в `Statement.execute` создаёт SQL-инъекцию; `PreparedStatement` защищает значения, но не параметризует имена таблиц и направления сортировки.
- Вычисление SpEL, OGNL, шаблонов и скриптов, а также `ObjectInputStream` для недоверенных байтов могут привести к выполнению кода, поэтому такие пути нужно устранять или жёстко ограничивать.
Зачем это спрашивают: Интервьюер проверяет, различает ли кандидат разбор аргументов в Java и явный запуск командной оболочки, а также знает другие характерные для языка опасные API.
Я отмечаю 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 и более безопасные альтернативы, а не общий совет проверять ввод.
Проверка пути и последующее открытие являются разными операциями, поэтому атакующий может между ними заменить символическую ссылку или запись каталога.
- `realpath` перед `open` всё ещё оставляет окно гонки, если другой процесс может изменить проверенный путь.
- В Linux я предпочитаю операции относительно файлового дескриптора, например `openat` с `O_NOFOLLOW`, доверенным дескриптором каталога и строгими правами и владельцем.
- Авторизацию и работу с файлом выполняю через один открытый дескриптор, а результат публикую атомарным `rename`, не разрешая путь повторно.
- Временные файлы создаю через `mkstemp` или аналогичный API с исключительным созданием, а не по предсказуемому имени после предварительного `exists`.
Зачем это спрашивают: Вопрос проверяет понимание того, что канонизация сама по себе не делает многошаговую операцию с файлами атомарной.
Проверка безопасности может устареть, если параллельный запрос изменит защищённое состояние до фиксации записи.
- Два запроса на погашение купона могут оба увидеть `used = false` и использовать один купон дважды, если проверка и обновление выполняются раздельно.
- Я закрепляю инвариант в одном условном обновлении, уникальном ограничении или транзакции с нужной блокировкой строки и принимаю только победивший результат.
- Если авторизация зависит от изменяемого членства, проверка политики и чувствительное изменение должны выполняться в одной транзакции или доверенной операции базы данных.
- Ключи идемпотентности останавливают повторные попытки одного запроса, но не заменяют блокировки и ограничения для разных запросов к одному ресурсу.
Зачем это спрашивают: Интервьюер оценивает, умеет ли кандидат превратить риск конкурентности в принудительно соблюдаемый инвариант приложения.
Я ограничиваю весь жизненный цикл исходящего запроса, а не только полученный от пользователя текст URL.
- Использую одну выбранную библиотеку разбора URL, разрешаю только `http` и `https`, запрещаю учётные данные и необычные числовые записи IP-адресов, а перед подключением получаю через DNS и проверяю все адреса назначения.
- Сетевой уровень блокирует адреса обратной петли, локальные адреса канала, диапазоны RFC 1918 и локальные диапазоны IPv6, адреса метаданных облака и запрещённые порты, в том числе после повторного разрешения DNS.
- Перенаправления отключены либо каждая новая цель проходит ту же проверку; размер ответа, время ожидания и число перенаправлений ограничены.
- Компоненты с высоким риском работают через прокси исходящего трафика или в изолированной сети, где белый список делает внутренние сервисы недоступными по архитектуре.
Зачем это спрашивают: Сильный ответ учитывает неоднозначный разбор URL, DNS, перенаправления и ограничения сети, а не предлагает хрупкий чёрный список строк.
Я нахожу места, где типизированное построение запроса сменяется сырым SQL, и определяю, какие части строки снова влияют на структуру запроса.
- Такие API, как SQLAlchemy `text`, Prisma `$queryRawUnsafe`, Knex `raw`, нативные запросы Hibernate и строковый `orderBy`, требуют проверки как точки выполнения SQL, даже если остальной код использует ORM.
- Плейсхолдеры связывают только значения. Имена таблиц и столбцов, операторы, направления сортировки и фрагменты SQL должны выбираться из фиксированных соответствий или собираться безопасным API.
- Я проверяю обёртки и поведение шаблонных строк: одни API параметризуют подставленные значения, а другие с похожими именами соединяют строки напрямую.
- В тестах передаю метасимволы как значения и неожиданные варианты идентификаторов, затем проверяю сформированный SQL и результат, чтобы данные не могли изменить структуру запроса.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат точно найти место, где заканчиваются структурные гарантии ORM.
Я проверяю как шаблоны от пользователя, так и постоянные выражения, у которых время поиска резко растёт с длиной входной строки.
- Вложенные или пересекающиеся квантификаторы, неоднозначные альтернативы и повторяемые группы перед несовпадающим окончанием служат тревожными признаками. Якоря сами по себе не делают поиск линейным.
- Перед поиском я ограничиваю длину строки, а неоднозначные выражения заменяю простым разбором, ограниченными квантификаторами или движком с линейным временем, например RE2, если хватает его возможностей.
- Регулярные выражения от пользователя запрещаю либо принимаю только ограниченный синтаксис и малый размер: успешная компиляция ещё не означает безопасное выполнение.
- В регрессионные замеры добавляю специально подобранные строки, которые почти совпадают, и задаю предел времени. Изоляция процесса и тайм-ауты остаются дополнительной, а не основной защитой.
Зачем это спрашивают: Сильный ответ сочетает анализ выражения, ограничение входных данных, более безопасный движок и проверку на специально подобранных медленных строках.
Загрязнение прототипа возникает, когда управляемые атакующим пути к свойствам изменяют прототип объекта, а не только его собственные данные.
- Рекурсивное слияние и функции задания пути должны запрещать `__proto__`, `prototype` и `constructor` на любой глубине, а не только на верхнем уровне.
- Я обновляю уязвимые библиотеки слияния и предпочитаю копирование по схеме в явные DTO или словари без прототипа.
- Код авторизации и конфигурации проверяет собственные свойства через `Object.hasOwn`, а не доверяет унаследованным значениям по умолчанию.
- Тесты отправляют вложенный JSON и параметры строки запроса, а затем проверяют, что обычные объекты и решения по безопасности не изменились.
Зачем это спрашивают: Интервьюер ожидает объяснение как механизма загрязнения, так и превращения унаследованных свойств в уязвимость приложения.
Я привязываю запрос к строгой модели формы для конкретной операции и не передаю сущность JPA механизму веб-привязки.
- В форме объявлены только редактируемые поля, `WebDataBinder.setAllowedFields` задаёт белый список на уровне фреймворка, а `setIgnoreUnknownFields(false)` запрещает стандартное молчаливое игнорирование неизвестных свойств.
- Запрещённые поля лишь попадают в список подавленных, поэтому я отклоняю запрос при ошибках в `BindingResult` или непустом `getSuppressedFields()` и возвращаю 400 при сбое строгой привязки.
- Сервис переносит проверенные значения в загруженную с учётом арендатора сущность, а владельца, роль и ID учётной записи получает из серверного контекста аутентификации, поэтому вложенный путь не может выбрать служебное состояние.
- В MVC-тестах я отправляю служебные, неизвестные и вложенные имена вроде `roles[0]` и проверяю отказ вместе с отсутствием изменений в хранилище.
Зачем это спрашивают: Интервьюер проверяет знание реального поведения Spring для подавленных и неизвестных полей, а не только рекомендацию использовать белый список.
Я выбираю предназначенный только для данных формат с явной схемой и избегаю форматов, способных создавать произвольные типы среды выполнения.
- JSON, Protobuf или ограниченная схема CBOR переносят примитивы и объявленные сообщения без Java `ObjectInputStream`, Python pickle и активации имён типов .NET.
- Я ограничиваю глубину вложенности, размеры коллекций и строк и общее число байтов, потому что даже безопасное создание объектов может исчерпать память или процессорное время.
- HMAC подтверждает целостность и подлинность, но не делает опасный десериализатор безопасным при компрометации ключа подписи или доверенного отправителя.
- Устаревшую нативную сериализацию изолирую за белым списком и границей миграции, а зависимости с цепочками гаджетов по возможности удаляю.
Зачем это спрашивают: Интервьюер оценивает, разделяет ли кандидат целостность данных и способность десериализатора выполнять код.
Я отключаю DTD и любое разрешение внешних сущностей, затем проверяю эти настройки на конкретной версии используемого парсера.
- Парсер не должен загружать внешние общие и параметрические сущности, схемы или ресурсы XSLT из сети и локальных файлов.
- Я ограничиваю размер ввода, расширение сущностей, глубину вложенности и время обработки для защиты от отказа в обслуживании, например при экспоненциальном расширении сущностей.
- Если формату нужна схема, она загружается из доверенного локального каталога, а не по URI из документа.
- Регрессионный пример пытается прочитать локальный файл и обратиться к внешнему контрольному адресу, чтобы тест доказывал защиту, а не просто наличие флага.
Зачем это спрашивают: Интервьюер ожидает конкретные ограничения XML-парсера, включая внешние схемы и истощение ресурсов.
Я добиваюсь того, чтобы валидация, авторизация, проверка подписи и бизнес-логика работали с одним однозначным представлением запроса.
- Повторяющиеся ключи объекта, числа вне допустимого диапазона, бесконечность и NaN, некорректный Unicode и чрезмерная вложенность отклоняются до того, как шлюз и приложение смогут истолковать их по-разному.
- Схема проверяет то же разобранное значение, которое затем использует бизнес-логика. Нельзя проверять исходный текст одним компонентом, а потом заново разбирать его другой библиотекой.
- Если протокол подписывает канонический JSON, все отправители и проверяющие используют одинаковые документированные правила канонизации. В остальных случаях подпись проверяется по точным исходным байтам до разбора.
- Набор проверочных примеров проводит неоднозначные данные через реальные парсеры шлюза и приложения и подтверждает одинаковый отказ без побочных изменений.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат устранить неоднозначность, когда один путь в коде защищают несколько парсеров.
Я считаю декодер и каждый производный артефакт частью обработки недоверенных данных в изолированном конвейере.
- Сервис проверяет сигнатуру файла и декодирует изображение обновлённой библиотекой, затем повторно кодирует его в поддерживаемый формат, не сохраняя управляемые атакующим метаданные или полиглотное содержимое.
- До создания миниатюры ограничиваю число пикселей, размеры, число кадров, память после распаковки, процессорное время и размер результата.
- Обработка запускается без прав root в песочнице без сети, с файловой системой только для чтения и новой временной директорией.
- Оригиналы и результаты хранятся под случайными ключами в закрытом хранилище, а при скачивании задаются фиксированный тип содержимого и `Content-Disposition` без определения типа браузером.
Зачем это спрашивают: Интервьюер проверяет многоуровневую защиту декодирования, ограничения ресурсов, изоляцию, хранение и выдачу файлов.
Я извлекаю архив в изолированную временную директорию со строгими ограничениями путей и ресурсов, затем проверяю весь полученный набор файлов.
- Каждое имя нормализуется и разрешается внутри целевой директории; абсолютные пути, выход к родительскому каталогу, символические и жёсткие ссылки, устройства и дубли нормализованных имён отклоняются.
- Ограничения охватывают число записей, размер отдельного файла и всего распакованного содержимого, коэффициент сжатия, вложенность и время обработки, чтобы остановить архивные бомбы.
- Для извлечения использую безопасные 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