Application Security
Все объяснения, задачи и лабораторная в одном месте.
Можно сохранить страницу в PDF через печать браузера. Для печати разборы ответов раскрываются автоматически.
1. Threat modeling и abuse cases
Объяснение
Threat modeling описывает потоки данных, границы доверия и нежелательные действия. Abuse case показывает, как штатная функция может быть использована против назначения. Защиту привязывают к конкретной угрозе.
Задача для самостоятельного решения
Что проверить у функции экспорта отчёта?
Показать разбор ответа
Право на каждую строку, объём, чувствительные поля, безопасный формат и аудит. Наличие права открыть экран не всегда даёт право выгрузить всё.
2. Authentication, sessions и authorization
Объяснение
Сессия представляет аутентифицированного пользователя, а объектная авторизация проверяется на каждом обращении. Идентификатор, который трудно угадать, не заменяет разрешение. Cookies требуют безопасных атрибутов.
Задача для самостоятельного решения
Закрывает ли UUID проблему чтения чужого документа?
Показать разбор ответа
Нет: UUID может утечь через ссылку или лог. Сервер должен проверить принадлежность документа и разрешённую операцию.
3. Injection, XSS, CSRF и SSRF
Объяснение
Injection смешивает данные и команды, XSS исполняет недоверенный контент в браузере, CSRF использует автоматические credentials, SSRF заставляет сервер обращаться к нежелательному адресу. У этих классов разные меры защиты.
Задача для самостоятельного решения
Как безопасно передать имя в SQL?
Показать разбор ответа
Через параметр запроса, не строковую конкатенацию. Экранирование HTML решает другую проблему и не делает SQL безопасным.
4. Secrets, dependencies и supply chain
Объяснение
Зависимости и сборка входят в цепочку доверия. Lockfile повышает воспроизводимость, но не доказывает безопасность пакета. Секрет, попавший в историю Git, считается раскрытым даже после удаления из текущего файла.
Задача для самостоятельного решения
Что делать после публикации токена в commit?
Показать разбор ответа
Отозвать и заменить токен, проверить использование и убрать источник утечки. Переписывание истории не отменяет существующие копии.
5. SAST, DAST, fuzzing и code review
Объяснение
SAST анализирует код, DAST — работающий интерфейс, fuzzing подаёт множество изменённых входов. Ни один инструмент не покрывает всю бизнес-логику. Найденный дефект требует воспроизводимого regression test.
Задача для самостоятельного решения
Может ли сканер доказать корректность скидки для роли партнёра?
Показать разбор ответа
Обычно нет: нужны предметные правила и тесты. Автоматический отчёт следует дополнять проверкой бизнес-инвариантов.
6. Security testing в CI и vulnerability handling
Объяснение
Vulnerability handling включает оценку, исправление, проверку и выпуск. Severity зависит от достижимости и последствий. Security gate должен иметь понятные правила исключений и срок исправления.
Задача для самостоятельного решения
Когда считать уязвимость закрытой?
Показать разбор ответа
После проверки исправления в выпущенной версии и regression test исходного сценария, а не только после merge кода.
Лабораторная работа
Подготовка
SQLite в памяти и Python 3; изолированный пример параметризованного запроса.
Учебный пример
import sqlite3
db=sqlite3.connect(':memory:')
db.execute('CREATE TABLE users(name TEXT)')
db.execute('INSERT INTO users VALUES (?)', ('alice',))
value="alice' OR '1'='1"
print(db.execute('SELECT name FROM users WHERE name=?',(value,)).fetchall())Как работает пример и что ожидать
Вывод []: вся строка value воспринимается как значение, а не SQL. Параметризация не выполняет авторизацию и не защищает HTML-вывод; эти проверки принадлежат другим границам приложения.
Итоговая работа
Добавьте объектную авторизацию, CSRF для cookie-действий и безопасный вывод текста. Тестируйте двумя собственными учётными записями; сохраните regression tests с ожидаемым отказом.
Проверка результата
1. Опишите исходные данные и условия запуска, чтобы другой человек мог повторить работу.
2. Приложите результат обычного сценария и сравните его с ожидаемым.
3. Проверьте неверный вход, граничный случай и отказ зависимости, если она есть.
4. Объясните выбранное решение и известное ограничение.
5. Сохраните исправления после самопроверки вместе с примером, который раньше не работал.
Как оценить работу
По каждому пункту поставьте 0 (не выполнено), 1 (выполнено с пробелами) или 2 (результат воспроизводим и объяснён). Если обязательный сценарий не работает, вернитесь к нему независимо от общей суммы. Это рубрика самопроверки: сайт не исполняет присланный код и не выдаёт автоматическую оценку проекта.