Экранирование символов


Экранирование символов — замена в тексте управляющих (служебных) символов на соответствующие им последовательности символов. Позволяет включить в текст такие символы, которые не могут быть включены в текст непосредственно. Например, если считается, что текст начинается кавычкой и заканчивается кавычкой, то не экранированная кавычка в тексте будет воспринята как признак конца текста, а не как символ текста, должна быть экранирована, чтобы восприниматься как символ текста. Экранирующий символ — символ, записываемый перед управляющим символом, чтобы управляющий символ считался не управляющим, а символом текста, часть управляющей последовательности символов.

Обычно тексты на языках программирования, на текстовых командных интерфейсах, на языках разметок текста (HTML, TeX, wiki-разметка) являются структурированными текстами — текстами, в которых некоторые символы (и их комбинации) используются в качестве управляющих, в том числе управляющих структурой текста. Если необходимо использовать управляющий символ в качестве «обычного символа языка», применяют экранирование.

Необходимо экранировать управляющие символы в автоматически генерируемом структурированном тексте. На практике управляющие символы в текстах могут встречаться редко. Например, теоретически имя пользователя не должно содержать управляющих символов. Программист, желая упростить программу, может не реализовать экранирование входных данных. Злоумышленники, желая получить доступ к системе, могут подавать на вход программе произвольные символы, включая управляющие. Упрощённая программа имеет скрытую уязвимость. Стороннее лицо (автор строковых данных) получает возможность влиять на структуру генерируемого текста. Уязвимость становится серьёзной, если созданный текст является чьей-то программой. Традиционно таким проблемам подвержены системы, использующие языки SQL (смотрите SQL-injection) и HTML (смотрите cross site scripting).

Когда в тексте много управляющих символов, будет много знаков экранирования; текст станет тяжеловесным. В таких случаях используют экранирование с завершающим текстом. Тогда управляющие символы считаются символами текста (не несут управляющих функций), а текст кончается, когда компилятор обнаруживает некоторую последовательность — завершающий текст.