Академия Онлайн

Основы веб-безопасности

Курс показывает, как обычные функции веб-приложений превращаются в уязвимости, если не проверять входные данные и не думать о среде запуска. Занятия идут от наблюдения за HTTP-запросами до короткого отчета о найденных рисках.

Для кого курс

  • Начинающие backend-разработчики.
  • Тестировщики, которым нужно проверять веб-приложения глубже UI.
  • Студенты, интересующиеся CTF и безопасной разработкой.
  • Администраторы учебных стендов и внутренних сервисов.

Формат

  • Мини-лекция с демонстрацией.
  • Практика на учебном стенде.
  • Разбор типичных ошибок.
  • Короткий отчет по итогам каждой недели.

Неделя 1. HTTP и поверхность атаки

Темы

  • Методы HTTP: GET, POST, PUT, DELETE.
  • Query-параметры, формы и тело запроса.
  • Cookies, сессии и базовая модель авторизации.
  • Заголовки запроса и ответа.
  • Коды ответа и их смысл для диагностики.
  • Browser DevTools и просмотр сетевых запросов.
  • Разница между frontend-валидацией и серверной проверкой.

Практика

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

Домашнее задание

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

Неделя 2. Файлы, шаблоны и ввод пользователя

Темы

  • Path traversal и небезопасная работа с путями.
  • Почему нельзя напрямую открывать путь из query-параметра.
  • Allowlist вместо blacklist.
  • Ошибки шаблонизаторов и утечки стека вызовов.
  • Отладочные страницы и диагностические endpoint-ы.
  • Разделение публичных и внутренних файлов.
  • Минимальные права для процесса приложения.

Практика

  • Найти функцию предпросмотра, читающую файл.
  • Проверить разные варианты относительных путей.
  • Сравнить безопасную и небезопасную реализацию.
  • Описать, какие файлы можно читать и почему это риск.

Домашнее задание

Подготовить короткий security report: название уязвимости, шаги воспроизведения, влияние на систему и рекомендации по исправлению.

Неделя 3. Перед публикацией в продакшен

Темы

  • Debug-режимы и почему они опасны на внешнем контуре.
  • Секреты в коде, файлах и переменных окружения.
  • Конфигурация staging и production.
  • Системные файлы, которые часто помогают атакующему.
  • Логи и аккуратная обработка ошибок.
  • Чеклист релиза для Flask-приложения.
  • Принцип минимального раскрытия информации.

Практика

  • Найти признаки debug-режима.
  • Определить, какие настройки нельзя переносить в production.
  • Сформировать список hardening-задач.
  • Разобрать пример плохого deployment checklist.

Домашнее задание

Сделать финальный отчет по учебному стенду: перечислить найденные проблемы, оценить критичность и предложить порядок исправления.

Финальный проект

Студенты получают маленькое веб-приложение и должны:

  • Найти минимум две проблемы безопасности.
  • Подтвердить каждую проблему безопасным способом.
  • Не ломать данные и не выполнять разрушительные действия.
  • Подготовить отчет для разработчика.
  • Добавить раздел “как проверить исправление”.

Контрольные вопросы

  • Почему нельзя доверять query-параметру с именем файла?
  • Чем allowlist лучше blacklist для выбора шаблона?
  • Почему stack trace может быть полезен атакующему?
  • Что должно отличаться между staging и production?
  • Как объяснить риск без излишней драматизации?

Лабораторные работы

Лабораторная 1. Карта поверхности приложения

Студент исследует учебный сайт, фиксирует все страницы, параметры, формы и отличия в ответах сервера. Цель — научиться смотреть на приложение как на набор входных точек.

Проверяется:

  • полнота карты endpoint-ов;
  • аккуратность заметок;
  • умение отличать пользовательский функционал от технических деталей;
  • корректное повторение запросов через curl;
  • фиксация кодов ответа.

Лабораторная 2. Небезопасный предпросмотр

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

Проверяется:

  • безопасное подтверждение path traversal;
  • отсутствие разрушительных действий;
  • сравнение нормального и аномального поведения;
  • описание влияния уязвимости;
  • предложение исправления через allowlist.

Лабораторная 3. Релизный чеклист

Студент получает конфигурацию staging-приложения и должен определить, какие пункты нельзя переносить в production.

Проверяется:

  • поиск debug-настроек;
  • анализ переменных окружения;
  • выявление лишних диагностических endpoint-ов;
  • рекомендации по логированию;
  • оформление краткого отчета.

Критерии оценки

  • Все шаги воспроизведения понятны и повторяемы.
  • В отчете нет разрушительных payload-ов без необходимости.
  • Риск описан через влияние на данные или управление приложением.
  • Исправления реалистичны для команды разработки.
  • Указан способ проверить, что проблема исправлена.

Типичные ошибки

  • Писать “сайт небезопасен” без конкретного сценария.
  • Путать информационную утечку и RCE.
  • Не указывать версию или окружение.
  • Делать выводы только по одному ответу сервера.
  • Предлагать blacklist вместо строгого списка допустимых файлов.

Дополнительные темы

  • Безопасная обработка загрузок.
  • Разделение публичных assets и внутренних файлов.
  • Настройка Flask error handlers.
  • Секреты и ротация ключей.
  • Минимальные права процесса приложения.

Результат

Студент научится видеть опасные места в привычных endpoint-ах, оформлять короткий security report и объяснять риск разработчикам понятным языком.