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

Экранирование символов — замена в тексте управляющих символов на соответствующие текстовые подстановки. Один из видов управляющих последовательностей .

Определение

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

Условно экранирование может быть разделено на три типа:

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

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

Экранирование символов привлекает особое внимание, когда структурированный текст генерируется автоматически. Включение в текст произвольных строковых данных предполагает обязательное экранирование в них управляющих символов. В то же время, очень часто реальные строки таких символов не содержат, что позволяет программисту пропускать эту операцию совсем и получать более простую программу, корректно работающую с «любыми разумными» строковыми данными. Однако, такой упрощенный код имеет скрытую уязвимость , потому что стороннее лицо (автор строковых данных) получает несанкционированную возможность влиять на структуру генерируемого текста. Уязвимость становится серьёзной, если созданный текст является чьей-то программой. Традиционно таким проблемам подвержены системы, использующие языки SQL (см. SQL-injection ) и HTML (см. Сross Site Scripting ).

Примеры

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

  • В языке программирования Си, внутри строк экранирование символов осуществляется с помощью символа ' \ ', помещённого перед экранируемым символом. (При этом символ '\' может экранировать себя, то есть для вывода бэкслеша используется комбинация '\\'), этот же символ используется для экранирования символов в командной строке 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 Экранирование символов