В этой статье
Что такое экранирование строк?
Экранирование строк — это процесс добавления специальных символов, чтобы символы с синтаксическим значением обрабатывались как буквальный текст. Каждый язык программирования и формат данных резервирует определённые символы — кавычки в JSON, угловые скобки в HTML, знаки процента в URL.
Без правильного экранирования строки со специальными символами вызывают ошибки парсинга, уязвимости безопасности как XSS и SQL-инъекции, или повреждённый вывод.
Форматы экранирования
Разные контексты имеют разные правила экранирования:
- Экранирование JSON — экранирует кавычки (\"), обратные слеши (\\) и управляющие символы (\n, \t, \r)
- Экранирование HTML — преобразует < в <, > в >, & в &. Предотвращает интерпретацию содержимого как HTML-тегов
- Кодирование URL — заменяет небезопасные символы hex-кодами %XX (пробел становится %20)
- Экранирование SQL — удваивает одинарные кавычки (' становится ''). Предотвращает атаки SQL-инъекции
- Экранирование regex — добавляет обратный слеш перед метасимволами . * + ? для буквального сопоставления
Распространённые случаи использования
Экранирование строк встречается на протяжении всего цикла разработки:
- Встраивание пользовательского ввода — правильное экранирование при вставке в JSON, HTML или SQL предотвращает ошибки и уязвимости
- Очистка форм — веб-приложения должны экранировать отправленный контент перед отображением для предотвращения XSS
- Построение API-запросов — при создании тел JSON-запросов все строковые значения должны быть правильно экранированы
Попробуйте бесплатно — без регистрации
Попробовать инструмент экранирования →Экранирование vs Кодирование: в чём разница?
Экранирование и кодирование часто путают. Экранирование добавляет маркеры, чтобы символы обрабатывались буквально. Вывод остаётся в том же формате.
Кодирование преобразует данные из одного представления в другое. Base64 преобразует бинарные данные в ASCII-текст. Ключевое различие: экранирование сохраняет формат, кодирование изменяет его.
Советы и лучшие практики
Правильное экранирование предотвращает ошибки и уязвимости:
- Экранируйте на границе — всегда экранируйте строки в точке входа в новый контекст
- Избегайте двойного экранирования — если фреймворк уже экранирует вывод, ручное экранирование создаст видимые обратные слеши
- Используйте контекстно-специфичное экранирование — HTML-экранирование не защищает от SQL-инъекции и наоборот
Часто задаваемые вопросы
Когда экранировать вручную, а когда использовать библиотеку?
Всегда предпочитайте библиотечные функции. Языки предоставляют встроенные утилиты, которые правильно обрабатывают крайние случаи.
Предотвращает ли экранирование все XSS-атаки?
HTML-экранирование предотвращает большинство XSS-атак, но не все векторы. Контент в контекстах JavaScript, CSS или URL требует дополнительной специфической санитизации. Заголовки CSP обеспечивают наиболее надёжную защиту.
В каком порядке экранировать, когда данные проходят через несколько форматов?
Экранируйте сначала для самого внутреннего контекста. Например, чтобы встроить строку в JSON, который будет в HTML-атрибуте, сначала JSON-экранируйте, затем HTML-экранируйте.