Направления / Веб-безопасность: классы дефектов и защита

Внедрение кода и клиентские дефекты: SQL, шаблоны, XSS

Веб-безопасность: классы дефектов и защита

Почему смешение данных и кода приводит к дефектам и как этого избежать на уровне архитектуры.

средний~50 минSQLiXSSшаблоныэкранирование

Зачем это нужно

  • Внедрение кода — классика, которая не исчезает: меняются технологии, принцип остаётся.
  • Клиентские дефекты затрагивают пользователей напрямую и часто обходят серверные проверки.
  • Понимание механизма позволяет предлагать правильные исправления, а не косметические.

Теория

Внедрение возникает, когда данные пользователя попадают в интерпретатор без разделения кода и данных. В SQL это решается параметризованными запросами — не «экранированием кавычек». В командной оболочке — отказом от конкатенации команд и использованием списков аргументов. В шаблонизаторах — отсутствием динамического построения имён шаблонов из пользовательских данных. В XML и подобных форматах — отключением внешних сущностей.

Клиентские дефекты: межсайтовые сценарии возникают, когда приложение вставляет данные в разметку без корректного контекстного экранирования. Защита строится на трёх уровнях: экранирование по контексту (HTML, атрибут, скрипт, URL), политика безопасности содержимого с запретом инлайновых скриптов, аккуратная работа с опасными операциями вроде вставки необработанной разметки. Отдельные классы связаны с подделкой запросов и междоменным взаимодействием: их закрывают проверкой источника запроса, атрибутами cookie и ограничением возможностей страницы.

Практическая проверка: найти места, где пользовательские данные изменяют поведение интерпретатора, и проверить, отделены ли данные от кода. Оценивать нужно не «прошёл ли конкретный символ», а может ли система в принципе разделять данные и код. Исправление почти всегда архитектурное: параметризация, безопасные API, разделение контекстов.

Ключевые концепции

Параметризованный запрос
Передача данных отдельно от текста запроса: правильный способ защиты от внедрения SQL.
Контекстное экранирование
Экранирование зависит от места вставки: HTML, атрибут, JavaScript, URL, CSS.
Политика безопасности содержимого
Заголовок, ограничивающий источники скриптов, стилей и соединений.
Подделка запроса
CSRF и SSRF: выполнение действий или запросов от имени пользователя или сервера.
Внедрение команд
Передача пользовательских данных в оболочку: приводит к выполнению произвольных команд.
Внедрение шаблонов
Подстановка пользовательских данных в механизм шаблонов на стороне сервера.

Инструменты

  • Burp Suite Community и ZAP — перехват, изменение и повтор запросов в лаборатории.
  • PortSwigger Academy — упражнения на каждый тип внедрения.
  • Статические анализаторы и линтеры для поиска опасных конкатенаций в коде.
  • Заголовочные анализаторы и сканеры конфигурации CSP.
  • Проверка параметризации на уровне ORM и слоя доступа к данным.

Практика в легальных лабораториях

  • Пройдите упражнение на внедрение SQL в PortSwigger Academy и опишите причину дефекта.
  • Найдите в учебном приложении место, где данные попадают в разметку, и объясните нужный контекст экранирования.
  • Настройте политику безопасности содержимого для своего приложения и убедитесь, что она не ломает работу.
  • Смоделируйте подделку запроса в своей лаборатории и предложите защиту.
  • Перепишите небезопасный фрагмент кода на параметризованный запрос и напишите тест.

Защита, детект и защитные меры

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

Правовая рамка и этика

  • Проверка на внедрение выполняется на своих стендах или в легальных лабораториях; против чужих систем — только по разрешению.
  • Не эксплуатируйте найденное на реальных данных: подтверждайте минимально необходимо.

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

  • Пытаться «фильтровать символы» вместо параметризации.
  • Доверять клиентской проверке и не валидировать на сервере.
  • Ослаблять политику безопасности содержимого до неработоспособности.

Чек-лист «умею»

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

Вопросы на интервью

  • Как защититься от внедрения SQL помимо параметризации?
  • Почему фильтрация символов — плохая защита от внедрения?
  • Как CSP помогает против внедрения скриптов?

Источники и первоисточники

CyberPath — обучение пентесту, кибербезопасности и сетевой грамотности