Skip to main content
CheckTown
Инструменты разработчика

Экранирование строк: Как обрабатывать специальные символы в коде

Опубликовано 6 мин чтения
В этой статье

Что такое экранирование строк?

Экранирование строк — это процесс добавления специальных символов, чтобы символы с синтаксическим значением обрабатывались как буквальный текст. Каждый язык программирования и формат данных резервирует определённые символы — кавычки в JSON, угловые скобки в HTML, знаки процента в URL.

Без правильного экранирования строки со специальными символами вызывают ошибки парсинга, уязвимости безопасности как XSS и SQL-инъекции, или повреждённый вывод.

Форматы экранирования

Разные контексты имеют разные правила экранирования:

  • Экранирование JSON — экранирует кавычки (\"), обратные слеши (\\) и управляющие символы (\n, \t, \r)
  • Экранирование HTML — преобразует < в &lt;, > в &gt;, & в &amp;. Предотвращает интерпретацию содержимого как 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-экранируйте.

Похожие инструменты