Экранирование символов — замена в тексте управляющих (служебных) символов на соответствующие им последовательности символов. Позволяет включить в текст такие символы, которые не могут быть включены в текст непосредственно. Например, если считается, что текст начинается кавычкой и заканчивается кавычкой, то не экранированная кавычка в тексте будет воспринята как признак конца текста, а не как символ текста, должна быть экранирована, чтобы восприниматься как символ текста. Экранирующий символ — символ, записываемый перед управляющим символом, чтобы управляющий символ считался не управляющим, а символом текста, часть управляющей последовательности символов.
Определение
правитьОбычно тексты на языках программирования, на текстовых командных интерфейсах, на языках разметок текста (HTML, TeX, wiki-разметка) являются структурированными текстами — текстами, в которых некоторые символы (и их комбинации) используются в качестве управляющих, в том числе управляющих структурой текста. Если необходимо использовать управляющий символ в качестве «обычного символа языка», применяют экранирование.
Условно выделяют три типа экранирования:
- экранирование одиночного символа;
- экранирование последовательности символов с помощью последовательностей символов «начать экранирование», «конец экранирование»;
- экранирование с помощью последовательности символов «начать экранирование» и такого символа «конец экранирования», который задаётся до начала экранируемого текста.
Отсутствие экранирования как причина уязвимости
правитьНеобходимо экранировать управляющие символы в автоматически генерируемом структурированном тексте. На практике управляющие символы в текстах могут встречаться редко. Например, теоретически имя пользователя не должно содержать управляющих символов. Программист, желая упростить программу, может не реализовать экранирование входных данных. Злоумышленники, желая получить доступ к системе, могут подавать на вход программе произвольные символы, включая управляющие. Упрощённая программа имеет скрытую уязвимость. Стороннее лицо (автор строковых данных) получает возможность влиять на структуру генерируемого текста. Уязвимость становится серьёзной, если созданный текст является чьей-то программой. Традиционно таким проблемам подвержены системы, использующие языки SQL (смотрите SQL-injection) и HTML (смотрите cross site scripting).
Примеры
правитьЭкранирование одиночного символа
править- В строковых литералах языка Си, в некоторых строковых литералах языка python, в оболочке unix-подобной ОС экранирующим символом является символ '\' (символ обратного слеша, бэкслеш), записывается перед экранируемым символом, может экранировать себя (то есть, для включения символа '\' в строку, используется последовательность символов '\\').
- В командной строке ОС microsoft windows экранирующим является символ '^', записывается перед экранируемым символом.
Экранирование группы символов
править- В языке программирования python экранирование последовательности символов в строке осуществляется указанием буквы «r» (от англ. raw — необработанный) перед строкой, т. е. символы экранируются последовательностями
r"экранируемый текст"
. - В вики-разметке экранирование текста осуществляется с помощью псевдотегов
<nowiki>
и</nowiki>
. Если нужно записать сам псевдотег<nowiki>
, это делается символами подстановки (<nowiki>
).
Экранирование текста с завершающим символом
правитьКогда в тексте много управляющих символов, будет много знаков экранирования; текст станет тяжеловесным. В таких случаях используют экранирование с завершающим текстом. Тогда управляющие символы считаются символами текста (не несут управляющих функций), а текст кончается, когда компилятор обнаруживает некоторую последовательность — завершающий текст.
<![CDATA[<sender>John Smith</sender>]]>;
- Многострочные литералы в PHP
$qry = <<<END
SELECT id
FROM `$aTableName`
WHERE `$aFieldName`='$sqFieldValue';
END;
Этот раздел не завершён. |
См. также
правитьДля улучшения этой статьи желательно:
|
В другом языковом разделе есть более полная статья Escape character (англ.). |