Борьба с 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
И это уже будет не хорошо.
Получаем 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#">
Удачи.
Ресайзим изображение при помощи 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(); }
Как говорится разницу легко заметить.
Mach-II 1.6
Тут оказывается вышел финальный релиз Mach-II 1.6 – хорошо известного и одного из старейших coldfusion-фреймуорков на свете.
Разработчики потрудились на славу – тут и кэширование и логгирование, и ещё море всяческих полезных штук, которые давно были в списках ожидания.
Особенно подробно о нововведениях рассказано в специальном сообщении блога разработчиков.
Секреты CF8
Предлагаю вашему вниманию запись выступления Чарли Айрехарта на Adobe MAX, посвящённую секретам Coldfusion:
А кому лень смотреть видео, тот может скачать .pdf с презентацией.
Читаем документы MS Office
Сегодня Рей опубликовал отличный пост о том, как при помощи coldfusion читать документы, созданные в MS Office.
Рей, кроме того, приводит и рабочий вариант кода, а также некоторые советы.
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-статье, где все параметры и свойства нового тега представлены.
SAVA: ваша бесплатная CMS
Да-да, совершенно бесплатная, многофункциональная, современная CMS, написанная на coldfusion – SAVA.
