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

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

Определение

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

Условно выделяют три типа экранирования:

  • экранирование одиночного символа;
  • экранирование последовательности символов с помощью последовательностей символов «начать экранирование», «конец экранирование»;
  • экранирование с помощью последовательности символов «начать экранирование» и такого символа «конец экранирования», который задаётся до начала экранируемого текста.

Отсутствие экранирования как причина уязвимости

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

Примеры

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

  • В строковых литералах языка Си , в некоторых строковых литералах языка python, в оболочке unix-подобной ОС экранирующим символом является символ ' \ ' (символ обратного слеша, бэкслеш), записывается перед экранируемым символом, может экранировать себя (то есть, для включения символа '\' в строку в строку включается последовательность символов '\\').
  • В командной строке ОС microsoft windows экранирующим является символ '^', записывается перед экранируемым символом.

Экранирование группы символов

  • В языке программирования python экранирование последовательности символов в строке осуществляется указанием буквы «r» (от англ. raw — необработанный) перед строкой, т. е. символы экранируются последовательностями r" экранируемый текст " .
  • В вики-разметке экранирование текста осуществляется с помощью <nowiki> и </nowiki> . Если нужно записать сам псевдотег <nowiki> , это делается символами подстановки ( &lt;nowiki&gt; ).

Экранирование текста с завершающим символом

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

<![CDATA[<sender>John Smith</sender>]]>;
  • Многострочные литералы в PHP
$qry = <<<END
SELECT id
FROM `$aTableName`
WHERE `$aFieldName`='$sqFieldValue';
END;

См. также

Источник —

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