Внедрение кода и клиентские дефекты: SQL, шаблоны, XSS
Веб-безопасность: классы дефектов и защитаПочему смешение данных и кода приводит к дефектам и как этого избежать на уровне архитектуры.
Зачем это нужно
- Внедрение кода — классика, которая не исчезает: меняются технологии, принцип остаётся.
- Клиентские дефекты затрагивают пользователей напрямую и часто обходят серверные проверки.
- Понимание механизма позволяет предлагать правильные исправления, а не косметические.
Теория
Внедрение возникает, когда данные пользователя попадают в интерпретатор без разделения кода и данных. В 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 помогает против внедрения скриптов?