Категорія: ColdFusion 8
Hack My CF
Брайан Рінальді з Foundeo Inc., про якого ми вже згадували в повідомленнях, присвячених безпеці, запустив ще один цікавий проект: Hack My CF.
Ввівши доменне ім'я та електронну скриньку (котра має знаходитися на тому ж домені -- що не дуже зручно, але має певний сенс), HMCF робить ряд запитів до вашого сайту та перевіряє його на наявність певних вразливостей, в тому числі XSS та інших. Повного списку тестів, на жаль, не надано. Напевне розробники залишили собі заділ для комерційних послуг зацікавленим власникам сайтів. Результати тестів будуть надіслані на вказану скриньку.
Merlin в публічній беті
Мерлін (Merlin) -- це система, що базується на AIR, призначена для керування сервером Adobe ColdFusion версій 7,8,9.
На даний момент вона в публічній беті, реліз обіцяють приблизно одночасно з виходом дев'ятки.
Дізнатися більше про неї можна з ґрунтовного скрінкасту від розробників, а заповнивши невеличку форму, й скачати дистрибутив з офіційного сайту.
І на додаток, просто ще один сайт на CF. Дружина Адама Лемана запустила в бету рекомендаційний сервіс Interfolio. Звісно, що написаний на CFML.
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 3
Продовжуємо розповідь про налаштування середовища для CFML-розробника.
В першій частині ми дізналися як налаштувати Apache 2, PHP 5, Java та ColdFusion 8.
В другій частині ми детально встановлювали та налаштовували ColdFusion 9.
Нарешті, дійшла черга й до мого нового улюбленця: Railo.
Я покладаю великі надії на цей CFML-двигун та вже пробую використати його для нових проектів.
Як заведено, для початку нам знадобиться дистрибутив, а саме стандартна версія Railo Server без JRE для всих ОС.
Скачаний tar.gz треба розпакувати та перемістити в /opt/railo.
Наш Railo насправді вже готовий до роботи, в чому легко переконатися виконавши команду
/opt/railo/bin/httpd.sh start
За кільканадцять секунд можна буде відкрити http://localhost:8600/ (стандартний порт) та побачити вітальне демо:
Так само можна завітати до адміністратора веб-контексту за умовчанням:
Але наша задача дещо ширша, тому вимикаємо Railo-server та переходимо до конфігурування.
Варто зауважити, що в цьому випадку немає проблеми конфлікту з CF, тому домашньою текою для хосту буде взято ту ж саму, що й для CF8.
В ній зберігаються всі мої CFML-проекти та скрипти, тому це буде зручно та виправдано.
Спочатку нам потрібно зібрати модуль Apache.
cd /opt/railo
./configure --with-java-home=/usr/lib/jvm/java-6-sun/ --with-apxs=/usr/bin/apxs2
Зауважу, що ключ java-home не обов'язковий, якщо у вас потрібна версія Java встановлена за умовчанням.
Треба уважно переглянути виведення на предмет повідомлень про помилки, які обов'язково треба виправити до переходу на до наступних команд:
make
sudo make install
В результаті цього ми отримаємо встановлений модуль /usr/lib/apache2/modules/mod_caucho.so
Через це відмінне ім'я (caucho) решта налаштувань теж матимуть його для одноманітності.
У випадку, якщо Railo змінить httpd.conf, його знову-так треба буде почистити аби запобігти дублюванню директив.
Натоміть створити /etc/apache2/cauchoconnector з таким вмістом:
<IfModule mod_caucho.c>
ResinConfigServer localhost 6800
CauchoConfigCacheDirectory /tmp
CauchoStatus yes
</IfModule>
Ініціалізація модуля аналогічна попередникам:
/etc/apache2/mods-available/caucho.load
LoadModule caucho_module /usr/lib/apache2/modules/mod_caucho.so
a2enmode caucho
Створення віртуального хосту теж вже знайоме:
/etc/apache2/sites-available/localhost.railo
NameVirtualHost localhost.railo
<VirtualHost localhost.railo>
ServerAdmin SetYourEmail@ServerName.tld
ServerAlias localhost.railo
ServerName localhost.railo
DocumentRoot /home/trovich/www/cfm
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/trovich/www/cfm/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
allow from all
DirectoryIndex index.cfm index.html index.htm
</Directory>
ErrorLog /var/log/apache2/error.localhost.railo.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.localhost.railo.log combined
Include cauchoconnector
</VirtualHost>
a2ensite localhost.railo
sudo /etc/init.d/apache2 restart
Так само робимо скрипт запуску, текст якого трішки відрізняється:
#! /bin/sh
java=/usr/lib/jvm/java-6-sun/bin/java
script=`/bin/ls -l $0 | awk '{ print $NF; }'`
while test -h "$script"
do
script=`/bin/ls -l $script | awk '{ print $NF; }'`
done
exec $java -jar /opt/railo/lib/resin.jar $*
Зауважу, що за основу тексту цього скрипта було взято оригінальний /opt/railo/bin/httpd.sh
Нарешті, реєструємо віртуальний хост в конфігурації Resin /opt/railo/conf/resin.conf
<host id="localhost.railo" root-directory="/home/trovich/www/cfm">
<web-app id="/" root-directory="/home/trovich/www/cfm/"/>
</host>
Він має знаходитися відразу після кофігурації хосту за умовчанням (<host id="" root-directory=".">).
Також в цьому файлі варто закоментувати блок, що відповідає за логування подій. По-перше, це вже робить для нас Apache, по-друге, він писатиме логи в доступну з вебу теку, що потребуватиме додаткового захисту. Цей блок починається з теґу <access-log ...
Запускаємо Railo:
sudo /etc/init.d/caucho [start|stop]
Якщо все йде добре, маємо бачити вже інакший дамп того самого файлу server.cfm.
http://localhost.railo/server.cfm
Найприємнішим в цій ситуації є факт, що Railo та CF8 можуть працювати одночасно, що дуже допомагає в тестуванні сумісності між ними та портуванні коду.
Сподіваюся, що ця стаття стане у нагоді розробникам та допоможе звертати більше уваги новим технологіям.
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 1
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 3
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 2
В першій частині розповіді ми дізналися як налаштувати Apache 2, PHP 5, Java та ColdFusion 8.
Час переходити до наступного етапу -- встановлення ColdFusion 9 (Centaur).
Хочу зауважити, що налаштування підпорядковані наступному принципові: CF9 поки в беті, тому використовується для експериментів та навчання. Вона не має заважати роботі CF8, хоча й намагатиметься.
Ця частина містить кільканадцять знимків екрану для наглядності, тому доволі великий повний текст розміщено тільки на сторінці посту »
Читати далі...
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 1
Як правило, веб-розробники мають потребу в декількох типах середовищ, навіть різних версій одного й того ж додатку.
В цій статті я розповім про те, як я налаштовую свою систему, що в даний момент включає в себе PHP 5, ColdFusion 8, ColdFusion 9 та Railo 3.1. На даний момент моєю основною робочою системою є Xubuntu (9.04), тож інструкції відповідатимуть цій ОС. Відповідно, потрібні деякі мінімальні знання з цієї області, як то навички користування консолею.
Головною нашою задачею є ізоляція різних середовищ одне від одного в рамках єдиної інсталяції Apache 2.
Це перша частина, присвячена налаштуванню Apache 2, PHP 5, Java та ColdFusion 8.
Для початку нам треба визначитися з іменами віртуальних хостів, на яких будуть розташовані середовища. Останнім часом я зупинився на наступній системі йменування хостів, котру ілюструє запис в /etc/hosts
127.0.0.1 localhost localhost.php localhost.cf8 localhost.cf9 localhost.railo
Призначення кожного елементу цілком очевидне.
Першим кроком є встановлення Apache 2 та PHP 5. В Ubuntu це дуже просто, потрібно в консолі виконати команду, подібну до наступної:
sudo apt-get install apache2 apache2-threaded-dev libapache2-mod-php5 build-essential
Решту потрібних модулів встановлюється при потребі. Примітка: останній елемент знадобиться нам пізніше, він не є необхідним для даного етапу.
PHP встановлюється глобально для всього веб-серверу (.php скрипти оброблятимуться і в кожному віртуальному хості), мене це не турбує, тому залишаю як є. На даний момент мені просто треба зробити окремий хост для PHP розробки. Для цього треба створити файл конфігурації хосту:
/etc/apache2/sites-available/localhost.php
Я звик тримати всі робочі файли в домашній теці, тому шлях до файлів розробки є таким:
/home/trovich/www/php
Тоді конфігурація localhost.php буде наступною (це повний текст файлу).
NameVirtualHost localhost.php
<VirtualHost localhost.php>
ServerAdmin SetYourEmail@ServerName.tld
ServerAlias localhost.php
ServerName localhost.php
DocumentRoot /home/trovich/www/php
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/trovich/www/php/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
allow from all
DirectoryIndex index.php index.html index.htm
</Directory>
ErrorLog /var/log/apache2/error.localhost.php.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.localhost.php.log combined
</VirtualHost>
Тепер нам залишається змусити Apache підхопити цей хост та перевірити його. Для цього виконаємо в консолі:
sudo a2ensite localhost.php
sudo /etc/init.d/apache2 restart
Створивши файл /home/trovich/www/php/index.php зі вмістом <?php phpinfo(); ?> можемо протестувати http://localhost.php/
У випадку успіху маємо побачити щось подібне до цієї картинки:
У випадку, якщо з'являються повідомлення про помилку (типовим є статус 500), варто звернутися до журналу Apache, що відповідає даному хостові:
/var/log/apache2/error.localhost.php.log
Я полюбляю спостерігати за змінами використовуючи tail:
tail -f /var/log/apache2/error.localhost.php.log
tail -f /var/log/apache2/access.localhost.php.log
Другий журнал відповідає нормальній роботі хосту та містить повідомлення про всі запити.
Тепер переходимо до головної задачі -- встановлення ColdFusion 8. Головної тому, що вона наразі є моїм основним середовищем розробки, тому всі налаштування орієнтуватимуться саме на її потреби.
Для початку треба отримати дистрибутив ColdFusion, скачавши розробницьку linux-версію з офіційного сайту Adobe.
Після скачування треба надати файлові права на виконання, в моєму випадку це виглядає так:
chmod +x coldfusion-801-lin.bin
Треба відмітити, що Adobe зробили вельми зручний консольний інсталятор для 8-ки (і 9-ки, відповідно), тому негайно переходимо до процесу:
sudo ./coldfusion-801-lin.bin
Виконання з правами рута (root) необхідне через потребу запису файлів в системні директорії.
З огляду на те, що на момент проведення даного експерименту в мене вже була готова інсталяція ColdFusion 8, я не описуватиму її детально, це буде зроблено нижче для ColdFusion 9. На щастя, вони майже ідентичні.
Зауважу лише кілька важливих моментів.
1. Очевидно, що для роботи CF потрібна Java JRE, а для Railo ще й JDK. Встановлення їх теж дуже просте:
sudo apt-get install java6-runtime java6-sdk
2. Зазвичай я встановлюю CF до /opt/coldfusion8.
Шлях для домашньої теки CF у мене історично є /home/trovich/www/cfm, без вказання версії. Там CF8 й розміщує теку CFIDE. Це важливо, бо CF9 матиме іншу домашню теку з власною CFIDE.
3. Встановлення CF та налаштування хостів мають йти поетапно, бо вони обидві переписують стандартний файл конфігурації Apache:
/etc/apache2/httpd.conf
Він нам буде ще потрібен, тому перейдемо до налаштувань віртуального хосту.
По-перше, нам необхідно ізолювати модуль CF8, для цього створимо йому окремий файл конфігурації.
/etc/apache2/mods-available/cf8.load
В цей файл переносимо текст завантаження модуля:
LoadModule jrun_module /opt/coldfusion8/runtime/lib/wsconfig/1/mod_jrun22.so
Далі створюємо файл /etc/apache2/cf8connector (назва може бути інша, головне щоб лежав в теці Apache2) та переносимо в нього решту конфігурації модуля:
<IfModule mod_jrun22.c>
JRunConfig Verbose false
JRunConfig Apialloc false
JRunConfig Ignoresuffixmap false
JRunConfig Serverstore /opt/coldfusion8/runtime/lib/wsconfig/1/jrunserver.store
JRunConfig Bootstrap 127.0.0.1:51800
#JRunConfig Errorurl url <optionally redirect to this URL on errors>
#JRunConfig ProxyRetryInterval 600 <number of seconds to wait before trying to reconnect to unreachable clustered server>
#JRunConfig ConnectTimeout 15 <number of seconds to wait on a socket connect to a jrun server>
#JRunConfig RecvTimeout 300 <number of seconds to wait on a socket receive to a jrun server>
#JRunConfig SendTimeout 15 <number of seconds to wait on a socket send to a jrun server>
AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf
</IfModule>
Увага: видаляти httpd.conf не можна, він просто має залишитися порожнім.
Підкажемо Apache, що у нас є новий модуль для нього:
sudo a2enmode cf8
Налаштуємо власне віртуальний хост. Для цього створимо файл конфігурації
/etc/apache2/sites-available/localhost.cf8
Вміст його майже ідентичний тому, що вже було показано для PHP:
NameVirtualHost localhost.cf8
<VirtualHost localhost.cf8>
ServerAdmin SetYourEmail@ServerName.tld
ServerName localhost.cf8
DocumentRoot /home/trovich/www/cfm
<Directory /home/trovich/www/cfm/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
allow from all
DirectoryIndex index.cfm
</Directory>
ErrorLog /var/log/apache2/error.localhost.cf8.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.localhost.cf8.log combined
Include cf8connector
</VirtualHost>
Дуже важливою особливістю є виділена жирним директива. Вона підключає наш файл конфігурації модулю саме для цього віртуального хосту.
Нарешті, завершимо операцію командами:
sudo a2ensite localhost.cf8
sudo /etc/init.d/apache2 restart
Перед тим, як перевіряти результати, варто запустити ще й CF. Зазвичай це робиться наступною командою:
sudo /opt/coldfusion8 start (stop для зупинки)
Для зручности я створюю Shell-скрипт для цього діла, що має наступний вміст:
#! /bin/sh
coldfusion=/opt/coldfusion8/bin/coldfusion
script=`/bin/ls -l $0 | awk '{ print $NF; }'`
while test -h "$script"
do
script=`/bin/ls -l $script | awk '{ print $NF; }'`
done
exec $coldfusion $*
Таким чином процедура запуску/зупинки зводиться до канонічного
sudo /etc/init.d/cf8 [start|stop]
Отже, сервер запущено, можна перевірити його дієздатність: http://localhost.cf8/server.cfm з текстом <cfdump var="#server#">. Маємо бачити щось схоже на це:
У випадку помилок так само звертаємося до журналів Apache, як було описано вище.
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 2
Встановлення PHP 5, CF 8, CF 9 та Railo 3.1 з Apache 2 в Ubuntu - частина 3
Про деякі особливості Application.cfc
Не всі розробники задумуються над тим, що Application.cfc це не тільки Application, але й повноцінна CFC. Використання її саме у якості компоненти дає кілька цікавих можливостей.
Наприклад, розглянемо таку просту компоненту:
<cfcomponent output="false">
<cfset this.name = "application_introspect" />
<cfset this.foo = "bar" />
<cffunction name="onRequestStart" returnType="boolean" output="false">
<cfargument name="thePage" type="string" required="true">
<cfset application.thePage = arguments.thePage />
<cfreturn true />
</cffunction>
</cfcomponent>
А тепер спробуємо використати її.
<cfdump var="#Application#" >
<p> </p>
<cfset test = CreateObject("component", "Application") />
<!--- CF9 way
<cfset test= new Application() />
--->
<cfdump var="#test#">
<cfset test.onRequestStart("introspect.cfm") />
<p> </p>
<cfdump var="#Application#">
Таким нехитрим способом можна робити дві речі:
-
Подивитися що всередині об'єкту Application (на прикладі this.foo).
-
Зручно маніпулювати Application scope.
Результат роботи вищевказаного коду виглядатиме так:
Cumulative Hot Fix 3 for ColdFusion 8.0.1
Вчора було випущено оновлення CHF 3 for ColdFusion 8.0.1, призначене спеціально для цієї версії. Більше того, Adobe рекомендує використовувати це оновлення тільки у тому випадку, якщо вам заважають виправлені недоліки.
Щодо швидкодії створення об'єктів
Минулого місяця тривала (й триває досі) хвиля дискусій, що були породжені появою ORM в CF9. Якщо бути точним, реалізацією ORM за допомогою CFC-об'єктів.
Багато хто з розробників піддав сумніву доцільність цього кроку, небезпідставно стверджуючи про те, що створення об'єктів в CF є витратним та повільним процесом, бо потребує ряду операцій та витрат, наприклад сама компонента та кожен метод є окремим Java об'єктом, створення областей видимості та ін. Докладніше про це питання можна прочитати ув одного з інженерів Adobe в замітці ColdFusion ORM and CFC Performance.
Нас же зараз цікавлять приклади та порівняння. Цією справою не полінувалися зайнятися кілька ентузіастів:
- ColdFusion 9 Object Creation Performance
- ColdFusion 8, 9 and Railo Object creation speed test
- CFC Creation Time in ColdFusion 8/9, Open BlueDragon 1.1 and Railo 3.1
І показали вельми цікаві результати, зокрема здивувала значна перевага Railo. Зрозуміло, що це лише один з аспектів швидкодії, котрий сам по собі не може бути базою для висновків.
Зауважу також, що обговорення питання проходить в гілці Object creation performance in CF 9: any better?
Вразливість у FCKeditor для ColdFusion 8.0.1
Серйозну вразливість було знайдено в FCKeditor, а конкретно в CF-конекторі для завантаження файлів.
Справа в тому, що в CF 8.0.1 він увімкнутий за умовчанням, що може бути використано для завантаження .cfm (а також .asp, що ) скриптів, що було описано в нещодавному повідомленні.
Тому дуже рекомендується вжити запобіжних заходів, від вимкнення конектора в налаштуваннях і до видалення завантажувача файлів, якщо ним не користуєтеся. Бо кілька сайтів вже було скомпроментовано.
Більше інформації та рекомендаці можна знайти в наступних повідомленнях:
CF8 and FCKEditor Security threat
ColdFusion 8 FCKeditor Vulnerability
Potential ColdFusion security issue (офіційна нота від Adobe з обіцянкою виправити проблему).
Проблема при обробці деяких JPG-малюнків в ColdFusion 8
Марк Кругер (Mark Kruger) нещодавно опублікував докладне пояснення ситуації, коли за деяких умов спроба обробки JPG-малюнків змушувало перезавантажуватися JVM, з відповідними наслідками для ColdFusion.
Проблема виявилася в некоректній обробці JPG "ICC" профілі в javax.imageio класах з JVM версії 1.6.0_04. Тому, хто раптом має цю версію, варто оновитися, проблему було вирішено вже в наступній збірці (після того вже було ще декілька).
Дізнатися докладніше про суть проблеми та знайти тестові JPG-файли для компроментації можна в оригінальному пості Марка.