Язык скриптования сайтов Parser 3

Opuntainttaint


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. Еще раз обращаем внимание, что преобразование происходит только в момент выдачи данных во внешнюю среду (пользователю, в файл или базу данных). Если не задан вид преобразования, данные останутся "грязными", но никаких замен сделано не будет.

Пример

Пример ^^taint.<br>

$town[Москва]

<a href="town.html?^taint[uri][$town]">$town</a>



В результате данные, хранящиеся в переменной town, будут преобразованы к типу URI. Русские буквы будут заменены на шестнадцатеричные коды символов и представлены в виде %ХХ.

Таблицы преобразований



as-is



изменений в тексте не делается



file-spec



символы * ? ' " < > |

преобразуются в "_XX",

где XX - код символа в шестнадцатеричной форме



uri



символы за исключением цифр, строчных и прописных латинских букв, а также следующих символов: _ - . "

преобразуется в %XX где XX - код символа в шестнадцатеричной форме



http-header



то же, что и URI



mail-header



если известен charset (если неизвестен, не будут работать up/low case), то фрагмент, начиная с первой буквы с восьмым битом и до конца строки, будет представлен в подобном виде:

Subject: Re: parser3: =?koi8-r?Q?=D3=C5=CD=C9=CE=C1=D2?=



sql



в зависимости от SQL-сервера

для Oracle/ODBC меняется ' на ''

для PgSQL меняется ' на '' и \ на \\

для MySQL делается средствами самого MySQL



js



" преобразуется в \"

' преобразуется в \' 

\ преобразуется в \\

символ конца строки преобразуется в \n

символ с кодом 0xFF предваряется \



xml



& преобразуется в &amp;

> преобразуется в &gt;

< преобразуется в &lt;

" преобразуется в &quot;

' преобразуется в &apos;



html



& преобразуется в &amp;

> преобразуется в &gt;

< преобразуется в &lt;

" преобразуется в &quot;



optimized-as-is

optimized-xml

optimized-html




дополнительно к заменам выполняется оптимизация по "white spaces" (символы пробела, табуляция, перевода строки).

Идущие подряд перечисленные символы заменяются только одним, который встречается в коде первым

<


br>

Ряд taint преобразований Parser делает автоматически, так, имена и пути файлов всегда автоматически file-spec преобразуются, и когда вы пишите…



^file::load[filename]



…Parser выполняет…



^file::load[^taint[file-spec][filename]]



Аналогично, при задании HTTP-заголовков и заголовков писем, происходят http-header и mail-header преобразования соответственно. А при DOM-операциях текстовые параметры всех методов автоматически xml преобразуются.

Также Parser выполняет ряд автоматических untaint преобразований:

вид

что преобразуется

sql

тело SQL-запроса

xml

XML код при создании объекта класса xdoc



Copyright © 1997?2004 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 28.05.2004

Содержание раздела