Жуки ColdFusion Skakunof Alex Хакер, номер #083, стр. 083-068-1 (a4_perfect@mail.ru) Основные ошибки программистов в cfm-сценариях Наши заокеанские друзья не разделяют нашего мнения о бесплатных приложениях и предпочитают платные решения - это в какой-то мере является для них гарантией качественной поддержки. Трудно сказать, виноват ли в этом менталитет, но при выборе платформы для создания серверных web-приложений все больше компаний отдают предпочтение ColdFusion, а не Perl или PHP. Мы с тобой воспримем эту ситуацию как факт и начнем изучать вопрос безопасности: ведь чем чаще встречаются cfm-сценарии, тем важнее для нас понимать, какие изъяны могут встречаться в подобных системах. [разберемся с основами] Первым делом нужно разобраться с тем, что же из себя представляет ColdFusion. Это сервер приложений (application server), которому веб-сервер (чаще всего ISS, но встречаются и связки с Apache), отдает на обработку специальные cfm-файлы - происходит это абсолютно аналогично тому, как php-файлы обрабатываются интерпретатором РНР. Файлы .cfm представляют собой код на языке CFML (ColdFusion Markup Language) - языке сервера ColdFusion, который является нестрогим подмножеством XML: все операторы и выражения представляются набором специальных тэгов. По этой причине cfm-сценарии порой выглядят как дизайнерские шаблоны для какой-то template-системы :). Однако такое внешнее сходство обманчиво: ColdFusion предоставляет массу возможностей и по функциональности едва ли уступает любому другому языку сценариев. Для настройки сервера используется ColdFusion Administrator - специальный web-инструмент, который позволяет через удобные диалоги конфигурировать систему. Более подробно об этом мы поговорим ниже. А сейчас давай пройдемся по языку, чтобы у тебя не возникало элементарных вопросов. Прежде всего нужно уяснить тот факт, что все CFML-тэги начинаются с префикса cf, после которого идет, собственно, команда. Так, две самые используемые в любом языке команды - присвоение и условие - здесь выглядят так: <cfif var neq 5> <!--- если var не равняется пяти ---> <cfset var = 5> <!--- установить var=5 ---> </cfif> Как видно из примера, операторы сравнения напоминают Lisp'овские - EQ (или IS) для равенства, NEQ для неравенства, GT и LT - больше-меньше. Также видно, что комментарии вставляются практически так же, как в HTML, только с каждой стороны - три тире, а не два. Большинство тэгов имеют соответствующие им закрывающие элементы, как <cfif> (в примере выше). Также тэги могут иметь и атрибуты: скажем, у цикла типа for будет 3-4 атрибута: имя переменной цикла, два атрибута с границами цикла и необязательный атрибут шага: <cfloop index = "i" from = "1" to = "10" step = "2"> ... HTML или CFML код... </cfloop> Кроме этого, частью CFML является CFScript - очень смахивающий на JavaScript язык; для его использования достаточно заключить требуемые инструкции в пару тэгов <cfscript></cfscript>. Вот первый пример, написанный на CFScript: <cfscript> if (var neq 5) var = 5; </cfscript> Несмотря на то, что все авторы статей и книг по CFML рекомендуют использовать CFScript ввиду его скорости по отношению к тэговому CFML, полевые замеры скорости наталкивают на вывод, что либо это те же яйца, только синтаксис привычнее, либо CFScript рулит только для какого-то узкого круга задач. |