ColdFusion 7: vulnerabilidade com o Sandbox Security

Se você não está usando o upgrade gratuíto do ColdFusion 7.02, devia fazê-lo já, especialmente se você é um provedor de hospedagem que oferece ColdFusion.

ColdFusion Sandbox Security vulnerability


Debugger para o ColdFusion

Finalmente uma boa ferramenta de debug para o ColdFusion, chamado FusionDebug. Ele é um plugin para o Eclipse, o que é um par perfeito para o CFEclipse!

Vejam algumas telas.


Update de segurança para API do CFAdministrator

É por estas e outras que sempre é importante fechar o acesso da pasta CFIDE/Administrator e CFIDE/adminapi além da simples proteção de senha do ColdFusion.

ColdFusion MX 7: AdminAPI security update

UPDATE: e vale lembrar que hoje saiu um Technote importante sobre o CFAdministrator também. Aparentemente ao editar as opções de JVM, o dito cujo bagunça as configurações no jvm.config. Eu nunca vi nenhum problema acontecer, mas vale a pena ficar ciente e ler o technote (que deve ser seguido de um hotfix em breve).


ColdFusion e SQL Server 2005

Bom technote explicando como configurar o CF para usar o driver JDBC do MSSQL 2005

ColdFusion MX: Configuring the Microsoft SQL Server 2005 JDBC driver


Clique para ativar e usar este controle

Foi disponibilizado no início do ano uma atualização para o Internet Explorer 6, que faz com que seja necessário “ativar” um conteúdo ativo (um Flash, Shockwave, Applet, etc) clicando nele antes de efetivamente utilizar. Essa atualização de conteúdos ativos (Active Contents) está associada ao artigo KB916281 da Microsoft e disponível para download automático no Windows, manualmente via Windows Update e também manualmente via download do site do Microsoft.

clique_para_ativar_este_controle.gif
Exemplo no site Submarino, que ainda não atualizou a inserção de conteúdos em Flash em seu site

Como essa atualização gerou uma certa polêmica (e boa parte dela por que os desenvolvedores não atualizaram seus sites, o que é incrível, já que a Microsoft disponibilizou ainda no ano passado informações sobre a atualização), há também um artigo no Knownledge Base no site da Microsoft de como voltar ao comportamento anterior (KB917425), e igualmente uma atualização pode ser baixada.

Um grande incômodo para os usuário (que pode nem saber o que fazer) ou ainda impedir com que a experiência seja a planejada. Apenas um “tooltip” é mostrado para ao usuário com a mensagem “Clique para ativar e usar este controle” (“Click to activate and use this control” no software em inglês).

Pode parecer uma insanidade, e realmente é. Isso ocorreu porque a Microsoft perdeu um processo judicial sobre o modo como seu browser lida com “Active Contents”, mais precisamente como controles ActiveX (O Flash Player para o IE é um ActiveX) podem ser ativa.dos A Microsoft, que não é boba nem nada, já havia disponibilizado desde Novembro do ano passado um workaround para isso. O workaround é, basica e sucintamente, gerar a tag object via um JavaScript externo (importante ser externo, pois se o JavaScript estiver no próprio arquivo HTML também será pedido para o visitante “ativar o controle”) ao invés de “embeda-la” (inseri-la) no código HTML diretamente. Eu disse que parecia insanidade…

A Adobe, claro, já incluiu esses workaround em seus produtos sob a forma de patchs. Há, por exemplo, uma atualização para o Flex 1.5 que faz com que o código HTML gerado (a tag object) seja diferente, de modo que o usuário não precise clicar para habilitar o conteúdo. Para os FlashForms do ColdFusion 7 também há houve um HotFix. Hoje ele não é mais necessário em vista do ColdFusion 7.0.2. Vale ressaltar que o Firefox não é atingido nem tem relação com essa atualização de ativar conteúdos do Internet Explorer.

Nos projetos que participo tenho utilizado um arquivo JavaScript (AC_RunActiveContent.js) proposto pela própria Adobe (http://www.adobe.com/devnet/activecontent/articles/devletter.html), que é bem simples e fácil de usar. Como os “embeds” dos arquivos em Flash em um projeto costumar ter as mesmas propriedades (de tamanho, cor e afins), também crio um JavaScript adicional – e é ele que chamamos em nossas páginas HTML. Por exemplo:

function embedFlash(url) {

AC_FL_RunContent(
‘codebase’,’http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0′,
‘width’,’100%’,
‘height’,’100%’,
‘src’,url,
‘quality’,’high’,
‘pluginspage’,’http://www.macromedia.com/go/getflashplayer’,
‘movie’,url,
‘allowScriptAccess’,’sameDomain’,
‘bgcolor’,’#ffffff’,
‘wmode’,false
);
}

Essa função pode ser customizada, como por exemplo, adicionar parâmetros de tamanho, transparência e afins, de acordo com as necessidades. Para utilizar, em páginas HTML, basta importar as funções e chamar a função embedFlash():

<script type=”text/javascript” src=”AC_RunActiveContent.js”>
<script type=”text/javascript” src=”EmbedFlash.js”>

<script type=”text/javascript”>embedFlash(‘Aplicacao.mxml?paramID=33’);

Note que para a função embedFlash() acima, personalizada, não há necessidade de passar a extensão do arquivo, e portanto o mesmo é valido para o método AC_FL_RunContent(), da própria Adobe. Este método adiciona a extensão “.swf” automaticamente. No caso do Flex 1.5, como os arquivos são compilados no servidor, acessa-se “App.mxml.swf”, por isso da extensão .mxml no exemplo acima. No caso de arquivos compilados localmente, como no Flex Builder 2, não haveria extensão, por exemplo. Vejam também que é possível passar parâmetros via URL.

O pessoal da área de TI pode reverter a atualização nas máquinas dos usuários (dos que tem a máquina atualizada), mas também é responsabilidade dos desenvolvedores atualizarem seus códigos, ainda mais com o grande prazo de divulgação das informações antes da efetiva atualização do Internet Explorer.


Bom livro de ColdFusion tunning

Um dos meus assuntos prediletos na forma de livro. Já tenho uma cópia e recomendo (custa U$ 49,00 em formato eBook – PDF): ColdFusion MX: Performance Troubleshooting and Tuning Guide de Grant Straker.


CFUnited começa com uma boa notícia: Tim Buntell

Tim Buntel está de volta à Adobe e ao ColdFusion. É o que estão divulgando por aí. Tim tinha anunciado sua saída em Fevereiro, mas aparentemente não conseguiu ficar muito longe do ColdFusion… 🙂


BlogCFC e “fully qualified names”

No blog da DClick estamos utilizando o sistemas de blog BlogCFC, escrito em ColdFusion por Raymond Camden, programador ColdFusion provavelmente bem conhecido do pessoal – ele mantém alguns projetos interessantes, como a lista CFCDev, CFLib e afins.

A idéia de utilizar o BlogCFC foi que justamente ele era em ColdFusion, de modo que seria fácil customizá-lo e utilizarmos em nosso servidor de hospedagem (que já tinha o CF instalado). Um das primeiras coisas que notei quando baixei o sistema de blog foi a grande quantidade de funções createObject() em objetos Java, e o nosso servidor de hospedagem usa sandbox security e por razões óbvias, bloqueia o uso de objetos Java no servidor, algo que aprovo e sempre sugerimos aqui no blog.

Leia o resto deste post »


pegaData 1.3

Atualizações da CustomTag “pegaData”, incluindo as contribuições de Ronan Lucio, a quem agradeço, e também algumas minhas, de última hora. Veja um exemplo e faça o download da dita cuja aqui.


Flex 1.5 no ColdFusion: cfchart, headless e múltiplas configurações da JVM

Assim como o ColdFusion, o Flex 1.5 também é uma aplicação Java, e digamos que você está desenvolvendo um projeto com ambas as tecnologias, normalmente iniciariamos duas instâncias – o ColdFusion standalone e o Flex standalone, ou a instância deles em um deploy num application server como o JRun ou TomCat. Mas o mundo Java é bem mais extensível do que isso e é possíval instalar as duas aplicações (ColdFusion e Flex) sob a mesma instância, iniciando portanto as duas ao mesmo tempo. Rodando as duas sob a mesma instância, sob os mesmos parâmetros de JVM, etc. A Macromedia disponibilizou um technote, há muito tempo atrás, de como instalar o Flex 1.5 no ColdFusion.

Porém, infelizmente isso pode trazer um notório problema que enfretei há muito tempo, no meio do ano passado (sim, esse é um post bem atrasado, mas que ainda sim pode servir de referência). Se seu application server estiver rodando em um servidor headless, isto é, sem monitor, sem placa e capacidade gráfica, o Flex 1.5, na instalação padrão não funciona, pois ele usa a API do Java AWT (Abstract Window Toolkit) para implementar tratamentos com gráficos e afins, e tenta usar processamento de hardware para tal. Como o servidor é headless, não há hardware para responder estas requisições. Em um caso que passei, o servidor era um Linux acessado remotamente por SSH – um verdadeiro “headless server”.

Felizmente há uma solução bem simples e trivial para isso, e a Macromedia (na época) disponibilizou um technote para servidores headless: adicionar o argumento -Djava.awt.headless=true na JVM, para que as instruções do AWT sejam executadas por software. Notem que neste technote, há uma passagem que diz: “Somente configure para headless se sua máquina realmente não tiver placa gráfica, caso contrário a tag cfchart do ColdFusion pode dar erros”.

No meu caso o ColdFusion e o Flex realmente estavam sob a mesma instância, mas o CF só provia as camada de negócios, e não gerava gráficos. Contudo, as outras instâncias do mesmo servidor (todas as instâncias sob o JRun 4) geravam gráficos com cfchart, e o JRun, por padrão, compartilha os parâmetros de inicialização da JVM, de modo que o parâmetro headless seria aplicado também às outras instâncias, inclusive as que tinham apenas o ColdFusion instalado. Mas o servidor era mesmo um headless, então não havia o que temer. Supostamente…

Mas todos os gráficos das outras instâncias do ColdFusion (criados com a tag cfchart) pararam de funcionar após o acréscimo do parâmetro do headless, parâmetro esse necessário para que o Flex instalado sob o mesmo JRun funcionasse!

Em um outro technote da Macromedia, fica claro que a tag cfchart não funciona se você utilizar o argument de headless na JVM (veja um outro technote sobre cfchart, headless e contas de domínio no Windows aqui). Mas oras.. eu precisava do parâmetro de headless para iniciar o Flex, mas não podia utilizá-lo se não os gráficos do ColdFusion paravam de funcionar!

Situaçlão delicada… Posto isso, algumas outras soluções eram possíveis. (1) Instalar uma placa gráfica no servidor, (2) ou rodar as instâncias com parâmetros de JVM diferenciados – algo que o JRun 4 não permite por sua interface administrativa (mas que felizmente se preocuparam em adicionar essa funcionalidade no JRun 4.5 “Cheetah”, em beta).

Então a primeira coisa que passou no momento foi instalar outro JRun, um com as instâncias do Flex 1.5 com ColdFusion, com o parâmetro headless na JVM, e outro JRun com as instâncias do ColdFusion, em que estes precisariam gerar gráficos via cfchart. Isso até descobrir que no JRun 4 é possível sim iniciar as instâncias com parâmetros de JVM separados (inclusive está no Release Notes).

Enfim, essa situação tende a não ser mais vista (já nem era tanto, já que é uma situação específica) com o advento do Flex 2 e a geração local (na máquina do desenvolvedor) dos arquivos, mas ficam por aqui as dicas (e o “causo”).