CFusion — Adobe ColdFusion во всей красе

17Фев/093

Борьба с SQL-инъекциями

CF не более уязвим от такого рода инъекций, чем иной другой язык, поэтому я покажу основы того, как защититься от SQL-инъекций1 при разработке cf-приложений.

Как вообще эти инъекции работают? Хм, ну это просто. Какой-нибудь негодяй может модифицировать GET- или POST-запрос таким образом, что выполнятся либо дополнительные SQL-инструкции, либо вовсе не те, которые должны были. Соответственно, негодник получит доступ к данным, которые предназначены не для его глаз – как правило это приватная информация пользователя или сразу группы оных.

Чтобы проверить ваше приложение еще на уровне разработки, подвержено оно SQL-инъекциям или нет, вы можете воспользоваться чудным и бесплатным к тому же air-инструментом – SQLFury.

А теперь, чтобы понять от чего нам защищаться, давайте поглядим на обычный cf-запрос:

<cfquery name="q" datasource="d">
   select * from posts where postsid=#url.id#
</cfquery>

Как видно, тут мы пытаемся сделать выборку сообщения, с числовым идентификатором переданным через URL. А что будет, если передать не число, а текст? Правильно – ошибка.

Но, можно модифицировать запрос:

http://localhost/?id=75%union%select%BASE_SCHEMA_VER%as%id,name%as%strmodelname,%name%as%strModelDescription%from%sysobjects

То есть передать такой sql-запрос:

union select BASE_SCHEMA_VER as id,name as strmodelname, name
as strModelDescription from sysobjects

И это уже будет не хорошо.

  1. Смотрите в wiki, что это такое в подробностях. []
15Фев/090

Получаем MAC-адрес

Как получить Mac-адрес средствами Coldfusion? Легко!

<cfscript>
j=createobject("java", "java.net.InetAddress");
m=createobject("java", "java.net.NetworkInterface");
a=j.getLocalHost();
mac=m.getByInetAddress(a).getHardwareAddress();
</cfscript>
<cfdump var="#mac#">

Удачи.

Связано с категорией: Полезности Нет комментариев
10Фев/090

Ресайзим изображение при помощи CF и .Net

Нашёл тут отличный пример того, как отличается выполнение одних и тех же задач в Coldfusion и .Net – а именно, ресайз изображений с 1024х700 до 250 пикселей по ширине.

Вот CF-код:

<cfimage
        action = "resize"
        height = ""
        width = "250"
        source = "#sourceFile#"
        destination = "#resizedFile#"
        overwrite = "yes">

А вот .Net-код:

static void ResizeImageByWidth(string orgName, string resizeName, int resizeWidth)
    {
        String src = orgName;
        String dest = resizeName;
        int thumbWidth = resizeWidth;

        //Get the source image to a System.Drawing.Image object
        System.Drawing.Image image = System.Drawing.Image.FromFile(src);

        //Create a System.Drawing.Bitmap with the desired width and height of the thumbnail.
        int srcWidth = image.Width;
        int srcHeight = image.Height;

        Decimal sizeRatio = ((Decimal)srcHeight / srcWidth);
        int thumbHeight = Decimal.ToInt32(sizeRatio * thumbWidth);
        Bitmap bmp = new Bitmap(thumbWidth, thumbHeight);

        //Create a System.Drawing.Graphics object from the Bitmap which we will use to draw the high quality scaled image
        System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp);

        //Set the System.Drawing.Graphics object property SmoothingMode to HighQuality
        gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

        //Set the System.Drawing.Graphics object property CompositingQuality to HighQuality
        gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

        //Set the System.Drawing.Graphics object property InterpolationMode to High
        gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

        //Draw the original image into the target Graphics object scaling to the desired width and height
        System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, thumbWidth, thumbHeight);
        gr.DrawImage(image, rectDestination, 0, 0, srcWidth, srcHeight, GraphicsUnit.Pixel);

        //Save to destination file
        bmp.Save(dest);

        //dispose / release  resources
        bmp.Dispose();
        image.Dispose();
    }

Как говорится разницу легко заметить.

10Фев/092

Mach-II 1.6

Тут оказывается вышел финальный релиз Mach-II 1.6 – хорошо известного и одного из старейших coldfusion-фреймуорков на свете.

Разработчики потрудились на славу – тут и кэширование и логгирование, и ещё море всяческих полезных штук, которые давно были в списках ожидания.

Особенно подробно о нововведениях рассказано в специальном сообщении блога разработчиков.

Связано с категорией: Новости 2 Комментарии
10Фев/094

Секреты CF8

Предлагаю вашему вниманию запись выступления Чарли Айрехарта на Adobe MAX, посвящённую секретам Coldfusion:

А кому лень смотреть видео, тот может скачать .pdf с презентацией.

Связано с категорией: Курс молодого бойца 4 Комментарии
5Фев/090

Читаем документы MS Office

Сегодня Рей опубликовал отличный пост о том, как при помощи coldfusion читать документы, созданные в MS Office.

Рей, кроме того, приводит и рабочий вариант кода, а также некоторые советы.

Связано с категорией: Полезности Нет комментариев
5Фев/090

OpenBD начала поддерживать cfvideoplayer

Это просто фантастическая новость. Бесплатный альтернативный coldfusion-сервер OpenBD начал поддерживать новый cf-тег – cfvideoplayer, который, понятное дело, будет проигрывать вам всякие медиа-файлы без каких-либо усилий.

В качестве плеера используется FlowPlayer, проект достаточно известный, и который уже поставляется вместе с самим OpenBD.

Что стоит проиграть сразу парочку видео? Да ничего:

<!--- Multiple Clips --->
<cfset clips = ArrayNew(1)>
<cfset clips[1] = "http://blip.tv/file/get/Twobydit760.flv">
<cfset clips[2] = "http://blip.tv/file/get/N8inpasadena-Flowers457.flv">

<cfvideoplayer video="#clips#" playlist="true" stop="true" autoplay="false">

<!--- Single Clip --->
<cfset singleClip = "http://blip.tv/file/get/N8inpasadena-Flowers457.flv">

<cfvideoplayer video="#singleClip#">

Сразу отправляю вас к wiki-статье, где все параметры и свойства нового тега представлены.

Связано с категорией: Новости Нет комментариев
5Фев/090

SAVA: ваша бесплатная CMS

Да-да, совершенно бесплатная, многофункциональная, современная CMS, написанная на coldfusion – SAVA.

Связано с категорией: Полезности Нет комментариев