Tainting
Внешние и внутренние данные | |
Создавая код на Parser, мы имеем дело с двумя видами данных. Один из них - это все то, что написано самим кодером. Второй - данные, получаемые кодом извне, а именно из форм, переменных окружения, файлов и от SQL-серверов. Все то, что создано кодером, не нуждается в проверке на корректность. Вместе с тем, когда данные поступают, например, от пользователей через поля форм, выводить их «as-is» (как есть) может быть потенциально опасно. Возникает необходимость преобразования таких данных по определенным правилам. Большую часть работы по подобным преобразованиям Parser выполняет автоматически, не требуя вмешательства со стороны. Например, если присутствует вывод данных, введенных через поле формы, то в них символы < > автоматически будут заменены на < и >. Иногда наоборот бывает необходимо позволить вывод таких данных именно в том виде, в котором они поступили.
Для Parser «свой» код, т.е. тот, который набрал кодер, считается clean («чистым»). Все данные, которые поступают извне, считаются tainted («грязными» или «окрашенными»).
код Parser - этот код создан скриптовальщиком, поэтому никаких вопросов не вызывает;
$form:field - здесь должны быть выведены данные, введенные пользователем через форму;
$my_table[^table::sql{запрос}] - здесь данные поступают из БД.
В случае с $form:field, поступившие tainted данные будут автоматически преобразованы и некоторые символы заменятся в соответствии с внутренней таблицей замен Parser. После этого они станут clean («чистыми»), и их «окрашенность» исчезнет. Здесь неявно выполняется операция untaint (снять «окраску»). Автоматическое преобразование данных происходит в тот момент, когда эти данные будут выводиться. Так, в случае с помещением данных, поступивших из БД, в переменную $my_table, преобразование выполнится в тот момент, когда данные будут в каком-либо виде выданы во внешнюю среду (переданы браузеру, сохранены в файл или базу данных).
Вместе с тем, бывают ситуации, когда необходимости в таком преобразовании нет, либо данные нужно преобразовать по другим правилам, чем это делает Parser по умолчанию. Например, нам нужно разрешить пользователю вводить HTML-теги через поле формы для дополнительного форматирования текста. Но, так как это чревато неприятностями (ввод Java-скрипта в гостевой книге может перенаправлять пользователей с вашего сайта на вражеский), Parser сам заменит «нежелательные» символы в соответствии со своими правилами. Решение - использование оператора untaint.
Copyright © 1997?2004 Art. Lebedev Studio | http://www.artlebedev.ru | Дата обновления: 05.12.2003 |