Экранирование символов
- 1 year ago
- 0
- 0
Экранирование символов — замена в тексте управляющих символов на соответствующие текстовые подстановки. Один из видов управляющих последовательностей .
Обычно языки программирования, текстовые командные интерфейсы, языки разметок текста ( HTML , TeX , wiki-разметка) имеют дело со структурированным текстом, в котором некоторые символы (и их комбинации) используются в качестве управляющих , в том числе управляющих структурой текста. В ситуации, когда необходимо использовать такой символ в качестве «обычного символа языка», применяют экранирование .
Условно экранирование может быть разделено на три типа:
Экранирование символов привлекает особое внимание, когда структурированный текст генерируется автоматически. Включение в текст произвольных строковых данных предполагает обязательное экранирование в них управляющих символов. В то же время, очень часто реальные строки таких символов не содержат, что позволяет программисту пропускать эту операцию совсем и получать более простую программу, корректно работающую с «любыми разумными» строковыми данными. Однако, такой упрощенный код имеет скрытую уязвимость , потому что стороннее лицо (автор строковых данных) получает несанкционированную возможность влиять на структуру генерируемого текста. Уязвимость становится серьёзной, если созданный текст является чьей-то программой. Традиционно таким проблемам подвержены системы, использующие языки SQL (см. SQL-injection ) и HTML (см. Сross Site Scripting ).
r"
экранируемый текст
"
<nowiki>
и
</nowiki>
. Если нужно записать сам псевдотег
<nowiki>
, это делается символами подстановки (
<nowiki>
).
Когда в тексте много управляющих символов, будет много знаков экранирования, текст становится тяжеловесным. Для таких случаев используется альтернативный метод экранирования — с завершающим текстом. В таком случае все управляющие символы будут именно символами (не несут управляющей функции), а текст кончается, когда компилятор обнаруживает некоторую последовательность — завершающий текст.
<![CDATA[<sender>John Smith</sender>]]>;
$qry = <<<END SELECT id FROM `$aTableName` WHERE `$aFieldName`='$sqFieldValue'; END;