Untaint, taint. Преобразование данных
^untaint{код}
^untaint[вид преобразования]{код}
^taint[текст]
^taint[вид преобразования][текст]
Оператор
taint помечает весь переданный ему
текст, как нуждающийся в преобразовании заданного
вида. Оператор
untaint выполняет переданный ему
код и помечает, как нуждающиеся в преобразовании, те части результата выполнения кода, которые не являлись частью кода на Parser, а поступили извне, например, из полей формы.
Если вид преобразования не указан, оператор
untaint делает преобразование вида
as-is, а оператор
taint помечает
текст как
tainted (неопределенно «грязный», без указания вида преобразования).
Само преобразование Parser выполняет позже, при выдаче результата обработки документа пользователю, перед выполнением SQL-запроса или отправкой письма.
Преобразование заключается в замене одних символов на другие в соответствии с внутренними таблицами пребразований. Предусмотрены следующие виды преобразований:
as-is
file-spec
http-header
mail-header
uri
sql
js
xml
html
optimized-as-is
optimized-xml
optimized-html
Выполняемые замены для каждого вида преобразования сведены в таблице ниже.
Важное замечание: «чистый» код также подвергается автоматическому преобразованию. Parser выполняет оптимизацию по «white spaces» (символы пробела, табуляция, перевода строки). Идущие подряд перечисленные символы заменяются только одним, который встречается в коде первым. В общем виде можно представить весь набираемый код следующим образом:
^untaint[optimized-html]{здесьнаходится код, набранный скриптовальщиком}
Необходимо учитывать это при создании кода! Схема автоматического преобразования Parser -
optimized-html.
Пример:
Пример на ^^untaint.<br>
<form>
<input name=field>
<input type=submit>
</form>
$tainted[$form:field]
"Грязные" данные - $tainted<br>
"Чистые" данные - ^untaint{$tainted}
В результате выполнения этого кода поступившие через поля формы данные не будут преобразовываться Parser и выдадутся в том виде, в каком они поступили. В квадратных скобках оператора
untaint задается вид выполняемого преобразования. Здесь мы опускаем квадратные скобки в методе
untaint и используем параметр по умолчанию
[as-is].
Как уже было сказано выше, большую часть работы по преобразованию данных Parser выполняет автоматически. Внешние данные, которые используются в «чистом» коде преобразуются к optimized-html.
Оператор
taint также помечает преобразование данных в соответствии с указанной таблицей, но, в отличие от
untaint, используется для «чистых» данных, т.е. созданных кодером, либо поступивших извне и уже обработанных
untaint. Еще раз обращаем внимание, что преобразование происходит только в момент выдачи данных во внешнюю среду (пользователю, в файл или базу данных). Если не задан вид преобразования, данные останутся "грязными", но никаких замен сделано не будет.
Содержание раздела