Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #83, НОЯБРЬ 2005 г.

Жуки 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 рулит только для какого-то узкого круга задач.

Содержание  Вперед на стр. 083-068-2