Проверка определяет допустимость значения, а кодирование — безопасный способ вставить его в конкретное место. Корректный ввод может быть опасен при другой интерпретации.
Контекстное кодирование вывода
Определение
Контекстное кодирование вывода — преобразование недоверенного значения для конкретного места вставки, чтобы обработчик воспринял его как данные, а не как разметку или код.
Также ищут: Output encoding · контекстное экранирование · output escaping · contextual encoding
Зачем это знать
Даже допустимое значение при неверной вставке может вызвать XSS, изменить URL или разметку.
Карта понятия
Что подтверждено
Текст HTML, атрибут HTML, JavaScript, CSS и URL обрабатываются по-разному, поэтому для каждого контекста нужен свой способ кодирования или безопасный API.
Граница применимости: Контексты вывода в браузере.
Проверка входных данных решает, допустимо ли значение, а кодирование вывода безопасно помещает его в конкретный контекст; эти меры не заменяют друг друга.
Граница применимости: Различие между проверкой ввода и кодированием вывода.
Когда нужно показать обычный текст, безопасный текстовый способ вывода позволяет не передавать значение разборщику HTML. Использование разборщика разметки для того же значения меняет контекст и требует другой защиты.
Граница применимости: Выбор безопасного места вывода по OWASP; это не запрет всей разметки в приложении.
Если функция действительно должна принимать форматированный HTML, простое кодирование превратит разметку в текст. Для разрешённой разметки нужен подходящий механизм очистки с закрытой политикой, а последующее небезопасное изменение может нарушить результат очистки.
Граница применимости: Различие кодирования текста и очистки разрешённого HTML в рекомендациях OWASP.
Кодирование параметра URL и внешнего атрибута защищает синтаксические границы, но не доказывает допустимость схемы или назначения ссылки. Эти свойства проверяют отдельным правилом до безопасной вставки.
Граница применимости: Вывод ссылки в документе; не смешивается с сетевой политикой исходящих запросов сервера.
Не путать
CSP добавляет ограничение исполнения, но не делает любое место вставки безопасным и не заменяет очистку разрешённой разметки.
Что проверить
- Определите точный контекст каждого места вывода.
- Для обычного текста выбирайте текстовый способ вставки.
- Не переносите кодирование HTML в произвольный контекст кода.
- Для разрешённого HTML применяйте подходящую очистку.
- Не меняйте очищенный результат небезопасным преобразованием.
- Отдельно проверяйте допустимость схемы и назначения ссылок.
- Проверьте места вывода в коде браузера вместе с серверными шаблонами.
Первоисточники
- Cross Site Scripting Prevention Cheat Sheet
Определяет context-specific output encoding и safe sinks; CSP и WAF рассматривает как дополнительные, а не основные XSS controls.
- Cross Site Scripting Prevention Cheat Sheet
Определяет context-specific output encoding и safe sinks; CSP и WAF рассматривает как дополнительные, а не основные XSS controls.
- Input Validation Cheat Sheet
Задаёт раннюю server-side проверку syntax и semantics, allowlist approach и границу с output encoding.
- Input Validation Cheat Sheet
Задаёт раннюю server-side проверку syntax и semantics, allowlist approach и границу с output encoding.
- Content Security Policy Level 3
Определяет CSP directives, source lists, nonce-source и browser enforcement для загрузки и исполнения content.