parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Misha v.3 20.10.2004 15:11

попробую и я немного прояснить ситуацию с taint-ингом.

taint - это не что-то в самом тексте, это дополнительная информация о тексте которую парсер хранит у себя, пока работает с ним.

как только парсер этот текст отдает куда-либо он использует эту информацию для того, чтобы сделать что-то с текстом перед самой выдачей.

т.е. если у нас был текст из двух букв на разных языках, и мы этот текст запишем в БД (файл) - то перед записью языки будет применены. но когда вы парсером попытаетесь считать это-же из БД (файла) - то там уже подобной информации не будет, будут только буквы. парсеру без разницы кто и когда положил туда эти буквы - сам он или ещё кто-либо, он начинает с самого начала - это внешние данные, поэтому по умолчанию он им н доверяет (грязные).

когда вы делаете некие преобразования перед сохранением данных пользователя в БД - tainting прекрасно работает. как только вы сохранили их в БД и на другой странице достали - про языки кусочков текста, которые были до записи текста в БД парсер уже ничего не знает.

поэтому мне кажется правильным делать все в один прием:
1 случай: мы получаем данные от пользователя, модифицируем их, корректируем ошибки и кладем в БД. после этого мы считаем что данные в БД уже хорошие, поэтому после доставания их из БД ^taint[as-is][их]. именно этот случай я обычно использую при написании административных интерфейсов.

2 случай: мы получаем данные от пользователя, ничего с ними не делая кладем в БД, а в другом месте достаем и показываем. в этом случае используем механизм taiтting-а при выводе. такие случаи имеют место быть в гостевых, форумах и т.д.

3 промежуточные варианты: а-ля описаный тут и тут. вы хотите чтобы часть работы была выполнена с использованием taint-инга ДО сохранения текста, а другая часть - после, но забываете что после того как ваш текст побывает "где-то там", парсер ничего не будет знать о языках кусочков этого текста. выход в подобных случаях такой: часть работы делать с использованием taint, а вторую часть - ручками.

по поводу модифицирования данных пользователя: по моему это лишнее. я могу понять когда что-то введенное в административном интерфейсе "типографится" (причем не всегда и безусловно, а это контролируется админом), но когда типографятся буквы, введенные посетителем в форму гостевой - это по моему перебор. не только потому, что это уже не те буквы, которые ввел пользователь и выдавать из за написанное им нехорошо (не нравится что он написал - удали, но править - не могИ!) но и потому, что ваша типографика может дать сбой, а оригинал уже будет утерян (не будет сохранен).

поэтому я считаю так-же как и ПАФ - то что введенное пользователем надо хранить в исходном виде.

P.S. преждевременная оптимизация - тоже зло, т.к. она очень негативно сказывается на масштабируемости и впоследствии выходит боком.