janeiro 2011


Fiz uma importante atualização do meu artigo Tutorial Tomcat – Instalação e Configuração Básica, um dos mais longevos e populares do meu site, introduzindo o atributo de contexto privilegiado para que a InvokerServlet possa ser utilizada no Tomcat 6.

Desde a revisão 25, eu comecei a atualizar o texto para cobrir o Tomcat 6. Mas só agora, na revisão 35, pude testar todos os aspectos nessa versão do Tomcat.

Descobri então que uma nova característica de segurança introduzida no Tomcat 6 necessitou alterações importantes na configuração do contexto, relativas ao uso da InvokerServlet.

InvokerServlet é uma servlet do Tomcat, definida no pacote org.apache.catalina.servlets, que serve para mapear e invocar genericamente qualquer servlet com base no nome da respectiva classe.

Utilizando Invoker Servlet, um mapeamento genérico como /servlet/* no web.xml permite que se possa executar através de um URL do tipo /servlet/NomeClasse uma servlet implementada pela classe NomeClasse.class.

Até o Tomcat 5.5, InvokerServlet podia ser declarada e mapeada no web.xml de qualquer aplicação web e era automaticamente localizada e ativada pelo classloader desta aplicação.

A partir do Tomcat 6, InvokerServlet passou a ser restrita ao classloader do Server (mecanismo do servidor Tomcat). Para carregar e utilizar esta servlet, um contexto de aplicação web deve ser definido como privilegiado, setando o atributo privileged="true" no elemento Context que o define.

Se esta configuração não for feita no Tomcat 6, ocorre o seguinte erro durante a tentativa de executar o mapeamento de InvokerServlet definido no web.xml do contexto da aplicação web, visível nos arquivos de log do Tomcat (em CATALINA_HOME/logs):

java.lang.SecurityException: Servlet of class org.apache.catalina.servlets.InvokerServlet is privileged and cannot be loaded by this web application

Cabe ressaltar que o mapeamento genérico de servlets baseado no nome da classe, como permite InvokerServlet, é considerado má prática. Em produção, o ideal é que se mapeie individualmente cada servlet utilizada em um contexto, no arquivo web.xml da aplicação web.

Contudo, o mapeamento genérico do InvokerServlet é um recurso muito útil em desenvolvimento para se testar rapidamente qualquer classe servlet implementada, sem a necessidade prévia de configurar um mapeamento específico para esta.

Na revisão 35, o texto todo do tutorial foi repassado durante sua validação completa para o Tomcat 6, o que acabou trazendo vários ajustes e melhorias no texto. Confira!

Para saber mais:

Relato aqui mais uma fraude eletrônica que observei hoje, e destaco os pontos importantes.

A mensagem de fraude é esta:

Assunto: Parabéns! Seu Diners foi sorteado para participar da promoção Presente Toda Hora.
Remetente (alegado): dinersbrasil@open.art.br
Imagem da mensagem hospedada em: http://lh3.ggpht.com/…/dinersdef32x.jpg
Link de destino apontado pela mensagem: http://www.redirecionadiners.com/www.diners.com.br.php
Link leva ao download de um executável Windows: Diners.exe

Como reconhecer que se trata de uma fraude do tipo “pesca trouxas” (phishing scam):

  • Tema suspeito. Faça a si mesmo perguntas como as seguintes: Você possui esse cartão? Inscreveu-se em alguma promoção? Forneceu e autorizou este endereço de e-mail a receber notificações? Existe mesmo essa promoção, e consta divulgada no site oficial do cartão? Fui sorteado, não está fácil demais? Lembre-se do ditado: “Quando a esmola é grande, o santo desconfia.”
  • Remetente suspeito (embora isso pudesse ser forjado). Por que o domínio “open.art.br”? Por que não um endereço do domínio do site oficial do cartão?
  • Link de destino suspeito, embora pareça verossímil a um leigo.
  • E o principal: Ao invés de levar a uma página de informações, ou cadastro, leva ao download de um executável. Desde quando uma promoção via internet vai exigir instalar e/ou executar um programa em seu computador, para o cadastro? Por que não apenas levar a uma página web de adesão, de preferência no site oficial do cartão? Downloads, ainda mais de arquivos executáveis (programas), são SEMPRE suspeitos até que se prove em contrário.

Aí o preguiçoso e crédulo pode pensar: Se é um arquivo executável, então o antivírus deve detectar vírus ou outro código malicioso.

Não é bem assim. Lembre-se que o antivírus em geral é como um “agente de polícia que procura bandidos baseado exclusivamente em uma lista de procurados; se o sujeito não está na lista, não é considerado bandido ou suspeito”. A “lista de procurados” são os dados recebidos nas atualizações do antivírus.

Se o antivírus não estiver recentemente atualizado, ou se o código malicioso ainda é muito recente e “o bandido não foi denunciado, descoberto e fichado pela polícia”, ou seja, ainda não foi detectado e analisado pelo fabricante do antivírus, o malware não constará na lista e o antivírus não detecta!

Esse é exatamente o caso. A fraude é muito recente, e analisei o arquivo executável nos 43 utilitários antivírus do site VirusTotal.com e nenhum deles ainda reconhece como malicioso no momento em que escrevo este artigo.

Veja reprodução do resultado atual da análise:


(PDF do resultado)

A conclusão é a mesma de sempre: Na internet, desconfie sempre, tenha muito cuidado!

Instalei o Firefox 4 Beta 8. Internamente, a nova versão do navegador trará muitas evoluções no motor Gecko 2.0 de processamento de páginas web, inclusive com suporte a HTML 5, e o novo mecanismo de JavaScript JägerMonkeyque promete ser mais rápido. Contudo, avalio aqui minhas primeiras impressões sobre novidades na interface do navegador.

Positivo A tela inicial mostra uma interface mais limpa e simplificada, maximizando o espaço disponível para exibição das páginas, como já fazem navegadores como Internet Explorer 8 e Google Chrome.

Positivo A barra de menu padrão some, e em seu lugar surge um botão “Firefox” no canto superior esquerdo que dá acesso ao novo estilo de menu de opções.

Pode-se perceber que o novo botão de menu é fortemente inspirado, para não dizer copiado, do Opera. compare na ilustração a seguir:

No detalhe a seguir, podemos perceber que os itens de menu que levam a submenus tem um comportamento dual: se você seleciona o texto do item de menu, é ativada a opção padrão daquele submenu; se selecionado o pequeno triângulo, abrem-se as opções do submenu.

Positivo Se você sentiu falta da barra de menu tradicional, há opção de exibi-la, bem como a barra de favoritos — abaixo da barra de navegação — e a nova barra de extensões — no extremo inferior da janela.

Negativo Já a barra de estado (status) que ficava na posição dessa barra de extensões foi extinta. Os controles adicionados por extensões passam a ser exibidos na barra de extensões, enquanto informações como o endereço (URL) de destino, quando se pousa o mouse sobre um link na página, passa a ser exibido em sequência na própria barra de endereço, como se pode ver na figura a seguir.

Negativo Esta mudança me parece bastante controversa. A barra de estado na parte inferior da janela é uma convenção de interface amplamente utilizada e assimilada pelos usuários. Até então no Firefox, ela exibia links destino, informações do andamento ao carregar páginas, e ainda aproveitava o mesmo espaço para exibir controles adicionados por complementos. Acho ruim fracionar a exibição dessas informações em locais distintos e distantes, dificultando o foco de visão do usuário. Além disso, acho que o espaço para exibir a URL da página atual e de um link de destino, no mesmo campo de endereço, é muito pouco, principalmente quando os endereços são extensos.

Há também a opção da barra de abas abertas ser exibida abaixo das barras de navegação e favoritos, bastando desmarcar a opção “Abas em cima”.

O botão de recarregar página (reload, F5) foi embutido à direita do campo de endereço, logo após o botão de adicionar/remover como favorito. Enquanto a página está carregando, este botão se torna a opção de interromper (stop, Esc).

Com a ausência da barra de estado na parte inferior da janela, a exibição do botão X de Interromper, na barra de endereço, e o ícone animado e texto da aba da página são os únicos indicativos visuais de que a página está sendo carregada. Serão suficientemente claro e informativos para este fim?

Positivo Se a barra de favoritos não está exibida, o botão de acesso rápido a todas as opções de favoritos (bookmarks) fica em um botão ao final da barra de endereço, à direita do botão de página inicial (home).

Negativo O acesso rápido à lista de histórico, ao voltar (back) ou avançar (forward) páginas com os botões de setas no início (esquerda) da barra de endereço, se dá mantendo pressionado (por mais de um segundo) um destes botões, ou clicando com o botão direito do mouse.

Há esse mesmo comportamento no navegador Google Chrome, mas considero pouco intuitivo. Prefiro a interface antiga do Firefox 3.x, similar à do Internet Explorer, em estilo list box, tendo à direita dos botões de navegação uma pequena seta para baixo que abre a lista de histórico como menu suspenso.

Se você deseja retornar a seta de menu drop-down à direita dos botões, há uma solução: instalar o complemento “Back/forward dropmarker add-on“.

Positivo Quando você preenche uma senha em um campo de formulário, o Firefox oferece para salvá-la no seu gerenciador de senhas através de uma nova forma de diálogo. Antes era uma nova barra que surgia acima da página. Agora, é com um balão que surge de um ícone à direita do campo de endereço.

Positivo E finalmente, acessível através de um novo botão no extremo direito da barra de abas, está o novo recurso de Grupo de abas.

É uma nova visualização de miniaturas de todas as abas abertas, organizadas em grupos. Diversos pulg-ins já adicionavam recurso similar em versões anteriores do Firefox. Esta é a proposta nativa do Firefox 4 para o usuário não se perder em meio a diversas abas abertas.

Nesta visualização inovadora, você pode criar grupos distintos de abas e navegar em apenas um grupo por vez, fechar uma aba (pela sua miniatura) ou um grupo inteiro de abas, ou selecionar uma miniatura para exibir a respectiva página.

Negativo Como o Firefox ainda está em beta, muitas de extensões (plug-ins) ainda não tem atualização compatível com a nova versão.

Positivo Por falar nisso, há uma nova interface também para os gerenciamento de Complementos, não mais exibida em uma janela de diálogo mas sim em uma aba.

Positivo A extensão Firefox Sync agora é parte integrante padrão do navegador, para sincronizar os favoritos, dados de formulário, senhas, histórico e abas abertas entre dispositivos e instalações do Firefox.

Positivo E pelo visto, um recurso introduzido desde o Firefox 3.6 mas que só agora constatei. Com a melhoria dos mecanismos internos de instalação de componentes, algumas extensões são ativadas imediatamente após sua instalação, sem a necessidade de reiniciar o Firefox.

Por hora, estas são as novidades perceptíveis nos primeiros minutos de uso da nova versão beta.

E você, caro leitor, está testando também o Firefox 4? Adoraria ver suas opiniões nos comentários deste artigo…

A equipe de tradução da Comunidade WordPress-BR concluiu e disponibilizou hoje a localização em português do Brasil para o WordPress 3.0.4.

WordPress é uma das mais populares, poderosas e eficazes plataformas de gerenciamento e publicação de conteúdo para sites do tipo blog (web log), como este aqui. Escrito em linguagem PHP orientada a objetos, o WordPress é software livre, amplamente utilizado e suportado pela comunidade, cheio de recursos e bastante extensível através de plug-ins de recursos e temas de personalização visual, livremente disponíveis em grande quantidade e variedade tanto no repositório oficial da WordPress.org quanto em outros sites.

A versão 3.0.4 é uma importante atualização de segurança, originalmente disponibilizada (em inglês) em 29 de dezembro de 2010. A atualização imediata é recomendada para todos os usuários do WordPress 3.0.x.

Enquanto isso, já está a caminho um novo ciclo de melhorias para a nova versão 3.1. O WordPress 3.1 Release Candidate 2 já está disponível para testes, trazendo ainda mais recursos e facilidades para esta plataforma.

Para saber mais: