Impressoras PDF: problemas com Firefox 4 e Ghostscript 64 bits

Enquanto eu atualizava as versões de software no artigo PDF Livre com (ou sem) o Ghostscript (revisão 21), descobri dois problemas de compatibilidade.

Por sorte, ambos são contornáveis, conforme explico a seguir.

Aceleração por hardware no Firefox 4

Um comentário sobre o anúncio do PDFCreator 1.2.1, no Blog da PDFForge, explica um problema na aceleração por hardware do navegador web Mozilla Firefox 4 que afeta as impressoras virtuais PDF.

Sintomas facilmente perceptíveis são que o arquivo PDF gerado fica bem maior e o texto não fica editável.

De fato, este problema está confirmado no site de suporte do Mozilla Firefox. Eu também o constatei, no Firefox 4.0.1 com as impressoras virtuais PDF (doPDF, PDFCreator, FreePDF etc.).

Para solucionar o problema, desative a aceleração por hardware no Firefox 4, que vem ativada por padrão:

  1. Menu Firefox > Opções.
  2. Painel “Avançado”.
  3. Aba “Geral”.
  4. No grupo “Navegação”, desmarque a opção “Quando disponível, usar aceleração por hardware”.
  5. Dê “OK”.
  6. Reinicie o Firefox.

Este problema foi documentado em um novo tópico 4.1 do artigo.

Detecção do Ghostscript 64 bits no FreePDF

Esta revisão 21 do artigo também foi atualizada com um novo tópico 3.1 sobre a detecção e configuração do executável coreto do Ghostscript 64 bits no FreePDF.

Em meu computador com apenas o Ghostscript 9.02 64-bits instalado, o FreePDF detectou incorretamente a DLL C:\Program Files\gs\gs9.02\bin\gsdll64c.dll, ao invés do executável C:\Program Files\gs\gs9.02\bin\gswin64c.exe. Tive que configurar manualmente o executável correto, nas opções do programa.

Para verificar e corrigir o caminho do Ghostscript, siga os seguintes passos:

  1. Execute o programa FreePDF, pelo menu iniciar do Windows.
  2. Escolha o menu Editar & Opções.
  3. Escolha a opção (em forma de link) “Run Admin Config”.
  4. Em “Localização das pastas”, verifique o que está preenchido em “Caminho do Ghostscript”.
  5. Para Ghostscript 64 bits versão 9.02, o caminho do executável correto deve ser
    C:\Program Files\gs\gs9.02\bin\gswin64c.exe. Para o Ghostscript
    32 bits, o executável deve ser gswin32c.exe.
  6. Acione o botão “Salvar” e, em seguida, feche a janela de opções e o programa.

Este problema de detecção não ocorreu com o Ghostscript 32 bits, com o qual o FreePDF detecta corretamente o executável gswin32c.exe.

Por fim, a revisão do artigo contempla o lançamento do Ghostscript 9.02, doPDF 7.2.367 e PDFCreator 1.2.1, atualizando os links de download do Ghostscript e numeração, datas de lançamento e tamanhos das novas versões de impressora PDF.

Restaurar ícone padrão de pastas do Windows

Um usuário do Windows ou algum programa pode alterar o ícone padrão (predefinido) de uma pasta. Isso em geral dificulta a identificação visual da pasta, principalmente quando se tratar de uma das pastas especiais do Windows, como “Documentos”, “Downloads”, “Imagens”, “Vídeos” (nas versões anteriores ao Windows Vista, estas pastas tinham o pronome Meus/Minhas) etc.

Um utilitário gratuito chamado WinBubble oferece, entre outros recursos úteis de diagnóstico, ajustes e configuração do Windows, uma opção fácil para restaurar o ícone ilustrativo original destas pastas.

  1. Baixe e instale o WinBubble, a partir do site “Unlock for Us”; role a página até encontrar os banners dos sites mirror do download: CNET Download.com, Major Geeks, Softpedia, Freeware Files, SnapFiles e outros.
  2. Abra o pacote ZIP baixado e execute o instalador do WinBubble (versão 2.0.37 à época deste artigo).
  3. Execute o WinBubble, pelo atalho WinBubbles instalado no Menu Iniciar ou na área de trabalho.
  4. Na aba “Icons”, encontre a pasta para a qual deseja restaurar o ícone padrão e clique no respectivo botão “Restore” (o “X” laranja em frente ao nome da pasta/folder).
  5. Selecione o botão “Apply” para aplicar a mudança. Depois pode fechar o programa.
  6. Pronto. Em alguns casos, pode ser necessário reiniciar o Windows, ou aguardar um tempo até que ele atualize o cache de ícones do sistema.

WinBubble - Icons - Restore

Para saber mais:

Restauração manual do arquivo DESKTOP.INI:

Outros utilitários e tópicos relacionados:

Suporte ao acordo ortográfico nos programas

Com o início da vigência do Acordo Ortográfico da Língua Portuguesa no Brasil em 2009, uma necessidade decorrente dos usuários de computador é o suporte a esta reforma ortográfica nos programas.

O mais importante são os revisores ortográficos e gramaticais dos editores de texto, bem como dos programas onde há campos de entrada/digitação de texto, como os clientes de e-mail e os campos de texto dos navegadores/browsers internet.

Veja a seguir quais já oferecem suporte ao Acordo Ortográfico da Língua Portuguesa.

LibreOffice/BrOffice/OpenOffice e Mozilla

O VERO – Verificador Ortográfico do projeto BrOffice.org inclui suporte ao acordo ortográfico, corretores ortográfico e gramatical e divisão de sílabas, desde a versão 2.0 já disponível em 1º de janeiro de 2009, graças ao trabalho do sergipano Raimundo Santos Moura.

Está disponível para uso com os programas do pacote de escritório LibreOffice/BrOffice.org (editor de texto, planilha, apresentações, desenho) versões 2.x em diante.

Disponível também com os programas de internet da fundação Mozilla — o navegador Firefox, o cliente de e-mail Thunderbird, a suíte Seamonkey — na forma de extensão como dicionário pt_BR para o corretor ortográfico nativo.

Microsoft Office

O Microsoft Office 2010 já tem suporte nativo ao Acordo Ortográfico.

A Microsoft liberou em 14/10/2009 o pacote de atualização KB972854 de 30/09/2009 para o Microsoft Office 2007, provendo suporte ao Acordo Ortográfico.

A página sobre a Atualização para o Verificador Ortográfico, Dicionário de Sinônimos e Verificador Gramatical do Microsoft Office 2007 também apresenta informações adicionais sobre a reforma ortográfica e indica Artigos sobre a Reforma Ortográfica da Língua Portuguesa.

Como o Microsoft Office 2003 já encerrou seu ciclo de vida principal de suporteem 14/04/2009, e entrou em suporte estendido apenas para atualizações de segurança até 2014 — a Microsoft deixou o suporte a essa versão de fora da atualização.

No Office 2007 com a atualização, observei que permanecia a autocorreção ao digitar de “linguiça” para “lingüiça” (com trema). Foi preciso eu remover manualmente: Opções do Word > Revisão de Texto > Opções de AutoCorreção > Substituir texto ao digitar > selecionar a substituição de linguiça > escolher o botão Excluir.

Para saber mais:

Universo Twitter

Continuo achando incrível a expansão do genialmente simples Twitter, que virou mania mundial — e como tudo que envolve internet, se espalha rapidamente entre os internautas no Brasil (inclusive eu).

O twitter combina características de rede social (site de relacionamentos) com “microblog” — este último combinação das características de blog, ao permitir a postagem de conteúdo pelos membros, com o de SMS, uma vez que as postagens devem ser curtas, não podendo exceder o limite de 140 caracteres cada.

A ideia parece relativamente simples, mas junta diversos conceitos e particularidades em uma combinação que tem se mostrado contagiante. Aos poucos, as pessoas e instituições vão descobrindo novas formas e objetivos de uso deste interessante serviço.

Microblog

A primeira característica essencial do Twitter é ser um microblog. Um usuário basicamente se inscreve no Twitter para:

  • Postar mensagens curtas, de até 140 caracteres cada.
  • Acompanhar as postagens de outros usuários.

O Twitter solicita cada postagem com a seguinte pergunta: “O que está acontecendo?” “O que você está fazendo?” Isto indica que a ideia inicial do Twitter propõe que as pessoas postem “mensagens instantâneas” sobre o que fazem, observam, descobrem ou pensam ao longo do dia. Mas cada um escreve o que bem entender em cada postagem.

Tem gente que realmente usa o Twitter como um diário instantâneo. Outros — indivíduos, empresas e meios de comunicação — preferem postar notícias e informações. Empresas podem usar o Twitter como canal de divulgação de ofertas, dicas e promoções, bem como relacionamento com seus clientes e fornecedores.

E, através dos simplórios recursos do Twitter em referenciar um usuário (através do símbolo arroba: @usuario) em uma postagem, e o de permitir enviar uma mensagem direta e privada a só um usuário, muita gente também utiliza o Twitter para trocar recados entre si, uma espécie de bate-papo não necessariamente em tempo real (já que o usuário referenciado ou destino não precisa estar utilizando o Twitter no momento, e pode ver a mensagem depois quando se conectar).

Rede social

A formação da rede social no Twitter difere um pouco de serviços existentes como Orkut, Facebook, MySpace, LinkedIn e outros. Nestes, tipicamente cada usuário se vincula a outros mutuamente, criando seu grupo de “contatos” ou “amigos”. A característica essencial da criação do vínculo é que ele é mútuo entre cada dois usuários, isto é, um usuário solicita adicionar o vínculo a outro usuário, este outro usuário confirma/aprova, e a partir daí ambos ficam vinculados entre si.

Já no Twitter, cada vínculo é unidirecional/unilateral. Um usuário decide “seguir” outro qualquer, e a partir daí passa a acompanhar as postagens deste. Mas não há reciprocidade automática, isto é, um usuário pode seguir outro, independente desse último seguir o primeiro ou não. Cada usuário tem assim dois grupos de vínculos: o conjunto de usuários que ele escolheu seguir (following), e a lista dos usuários que o seguem (followers).

Entretanto, existem dois mecanismos reguladores. Primeiro, um usuário pode, uma vez identificado que tem um seguidor indesejado (por padrão, o Twitter notifica via e-mail um usuário quando alguém escolheu segui-lo), bloqueá-lo, desfazendo o vínculo criado pelo seguidor e impedindo que este estabeleça novamente o vínculo.

Segundo, o usuário pode ativar a opção de proteger suas postagens, de forma que: (a) para um usuário segui-lo, é preciso sua confirmação de aceite, embora o vínculo continue unidirecional; (b) suas postagens só podem ser lidas pelos seguidores aprovados.

O Twitter oferece também um novo recurso de listas. Cada usuário pode criar listas — públicas ou privadas — para organizar usuários que segue, de acordo com qualquer tema, rótulo ou característica de agrupamento que bem entender. Pode por exemplo criar uma lista de familiares, outra de colegas de trabalho, mais uma de colegas de escola, de especialistas em determinado assunto, de veículos de comunicação,… etc. Cada lista é um agrupamento ou (sub)conjunto arbitrário de usuários que você faz, permitindo exibir as postagens apenas daquele grupo de usuários quando selecionada. Um mesmo usuário pode constar em múltiplas listas.

Riscos de Segurança e Privacidade

Um risco de segurança enorme é que muitas pessoas embolam e confundem todos esses conceitos e recursos. Com isso, muitas vezes acabam postando conversas com assuntos privados em postagens públicas, e acabam inadvertidamente escancarando sua privacidade para o mundo!

Esse é um risco comum das ideias e serviços novos, pouco explorados e incipientes que vem surgindo na era da Web 2.0, da internet como canal interativo e social. Isso se agrava pelo fato da internet atingir bilhões de usuários de forma global, muitos deles despreparados tanto para lidar com a internet de forma proficiente, consciente e segura, quanto para compreender e utilizar adequadamente os serviços neste meio.

Outro risco também comum das redes sociais é que cada vez mais se tem acesso a conteúdo e informação de forma crua e direta, e de origens desconhecidas ou não confiáveis. É difícil se ter confiabilidade em “quem” realmente é cada usuário e no “o que” se recebe aos montes em milhões de mensagens. Boatos, mentiras e até golpes maliciosos podem ser rapidamente proliferados de forma difusa e semi-anônima.

Para combater um pouco o problema da confiabilidade da identidade dos usuários, o Twitter já realiza nos EUA um serviço de “certificação” de alguns usuários mais notórios, em geral celebridades e pessoas públicas — como o presidente americano Barak Obama e o jornalista brasileiro William Bonner — adicionando um selo de “conta verificada” a estes perfis.

Ferramentas

Por causa da simplicidade quase simplória dos recursos do Twitter, muitos outros serviços vão surgindo para complementar suas funcionalidades. Uma API disponibilizada pelo Twitter permite que esses serviços complementares se integrem e interajam com o Twitter, podendo autenticar um usuário e interagir com sua conta.

Um dos serviços mais comuns é o de encurtamento de URL. Como muitos URLs (endereços ou links) de internet são muito grandes e o Twitter tem o limite de 140 caracteres no texto total da mensagem, muitas vezes não há caracteres suficientes para se incluir um link extenso em uma mensagem, menos ainda se for um link acompanhado de uma frase ou descrição.

Por isso, a prática comum no Twitter é se utilizar um serviço chamado encurtador de URL (URL shortening). Existem diversos serviços gratuitos destes. Uma vez fornecido um endereço de internet, ele gera uma URL no site do encurtador com uma pequena sequência arbitrária de caracteres (em geral 4 a 6 letras e números), que funciona como um atalho que redireciona automaticamente para o endereço original.

O próprio Twitter e outras aplicações que permitem postar mensagens no Twitter podem converter links escritos em uma mensagem para um endereço “encurtado”, utilizando um serviço de URL shortening. Eis alguns serviços encurtadores de URL:

  • TinyURL.com: pode gerar uma sequência arbitrária de caracteres para o atalho, mas também permite que você escolha/defina a sua.
  • migre.me: seu site tem interface também em português.
  • bit.ly
  • LC4.in: menos conhecido, também tem interface em português.
  • Ow.ly
  • goo.gl: Google URL Shortener, atualmente usado nos produtos Google (não disponível para uso aberto).
  • dmoz Open Directory: listagem de serviços de redirecionamento e URL shortening.

Eis uma pequena lista de amostra de outros serviços complementares ao Twitter:

  • Twitpic e TweetPhoto: permitem que se poste e mantenha imagens e fotos, que podem facilmente ser referenciadas em mensagens do Twitter.
  • Twibbon: permite que se crie uma campanha para se promover e divulgar uma causa ou tema qualquer no Twitter. Para isso, cria-se uma “selo”, uma imagem com transparência que pode ser sobreposta — como um rótulo ou bottom (ribbon) — à imagem de cada usuário que adere a tal causa/campanha.
  • TweetGrid: permite criar um painel de termos de pesquisa para ser atualizado em tempo real com postagens referentes do Twitter.
  • Twinester: permite criar grupos ou comunidades baseados no Twitter.
  • Hashtags.org: busca postagens no Twitter por hashtag, com direito a gráfico de evolução de trends no tempo.

E existe uma infinidade de outros serviços e aplicações. Veja por exemplo os seguintes links:

Para saber mais

Algumas referências adicionais de informação sobre Twitter:

Horário de Verão no Brasil

À zero hora deste domingo dia 18 de outubro começa o Horário de Verão 2009/2010 no Brasil.

O Horário de Verão (em inglês Daylight Saving Time – DST) é um recurso utilizado por dezenas de países, consistindo em alterar os relógios (em geral adiantando em 1 hora) durante o período do verão, para aproveitar por mais tempo a luz natural do sol e assim economizar energia.

Histórico

O histórico do horário de verão remete a origem da ideia a Benjamin Franklin, que em 1784 na França publicou uma carta anônima em um jornal sugerindo aos Parisienses que acordassem mais cedo para aproveitar a luz do sol e economizar energia de velas.

O moderno horário de verão com período definido é atribuído por várias fontes a William Willett, construtor Britânico e membro da Sociedade Astronômica Real da Inglaterra, que em 1907 deu início a uma campanha para adoção do horário de verão naquele pais. Mas a Wikipédia em inglês contesta essa informação e aponta o entomologista e astrônomo George Vernon Hudson, da Nova Zelândia, como o primeiro a propor o horário de verão moderno em um artigo de 1895 apresentado à Wellington Philosophical Society.

O horário de verão foi efetivamente introduzido pela primeira vez em 30 de abril 1916 na Alemanha, na Áustria-Hungria e, no mesmo ano, na Irlanda, como uma medida de economia após a Primeira Guerra Mundial, seguido depois por diversos países.

No Brasil

No Brasil, o horário de verão foi adotado pela primeira vez em 1931 em todo o território nacional, visando também à economia de energia elétrica, instituído pelo Decreto nº 20.466 de 01/10/1931. Após dois anos de experiência, a medida gerou oposição e foi revogada em 1933.

Em períodos subsequentes a hora ou horário de verão foi instituída e revogada — de 1949 a 1953 após a Segunda Guerra, de 1963 a 1968, motivado pelo efeito negativo das estiagens e a economia de energia hidroelétrica e suspenso durante a Ditadura Militar.

A hora de verão no Brasil voltou na presidência de José Sarney em 1985, com períodos definidos por Decreto a cada ano, inicialmente em todo o território nacional, mas depois passou a valer apenas em alguns estados (quais variando em sucessivos decretos).

Diferente de uma regra fixa de vigência do horário de verão modernamente adotada por diversos países, já que o ciclo solar é igualmente fixo e bem definido, no Brasil cada decreto desde 1985 arbitrava as datas anuais de início e fim, e pior, em geral com pouquíssima antecedência.

Essa variação constante e de “última hora” de datas e estados no Brasil causou muitos transtornos. A situação piora de forma crescente na era dos milhões e bilhões equipamentos eletrônicos e computadores com relógio interno e controle de horário, e ainda mais agravado no mundo da internet e das redes globais interconectando tudo! Veja por exemplo o artigo Horário de verão e a segurança dos computadores.

Finalmente o Decreto nº 6.558, DE 8 de setembro de 2008, no governo Lula, instituiu uma regra permanente para a Hora de Verão em parte do território nacional, mas como infelizmente muita coisa no Brasil — ainda mais na política — sempre tem algo para complicar, o decreto tem dois problemas:

  • Enquanto nos Estados Unidos as (raras) alterações de regra no horário de verão foram sempre publicadas com mais de um ano de antecedência, o Decreto de 2008 mais uma vez “sagrou” a falta de planejamento brasileira, sendo publicado pouco mais de um mês antes do início da vigência do horário de verão naquele ano.
  • No artigo primeiro que cria a regra fixa de datas de início e fim, o Decreto tem um parágrafo que cria uma exceção incrível: “No ano em que houver coincidência entre o domingo previsto para o término da hora de verão e o domingo de carnaval, o encerramento da hora de verão dar-se-á no domingo seguinte.” Depois tem gente que reclama quando dizem que no Brasil tudo acaba em samba (ou em pizza)…

Para saber mais:

Computadores com Windows: Um dos grandes impactos do horário de verão do Brasil é no ajuste dos milhões de computadores pessoais com o sistema pessoal Windows. Veja as seguintes informações e orientações a respeito:

Segurança das aplicações web

[Atualizado em 2011-08-21, com referências do OWASP.]

Depois do incidente de segurança envolvendo o portal da operadora Vivo que abordei ontem, um artigo de hoje da IT Web tem tudo a ver: 5 lições de segurança, por Greg Shipley, Tyler Allison e Tom Wabiszczewicz, da empresa Neohapsis especializada em GRC (GRC em inglês), para InformationWeek EUA, 10/09/2009.

No artigo, os especialistas quebram o silêncio típico do mundo corporativo sobre segurança e trazem uma síntese de sua experiência em observação direta das brechas de segurança do mundo real onde realizaram investigações forenses, para ajudar as empresas a entender como essas brechas acontecem e o que se pode fazer sobre elas.

Eles ressaltam: “Após centenas de casos, podemos afirmar, sem sombra de dúvidas, que os ataques estão mais sofisticados do que nunca. Com agilidade, eles exploram controles de segurança falhos e práticas operacionais negligentes e, munidos com ferramentas comuns para gerenciamento de rede, adaptam malwares. Táticas e tecnologias de segurança da informação também progrediram, mas não no mesmo ritmo.”

O mais admirável é que os recursos para mitigar as brechas de segurança são métodos razoáveis e bem conhecidos. O que é preciso é um esforço para que esses métodos sejam implementados e continuamente praticados de forma mais ampla e efetiva pelas corporações.

Problema – vulnerabilidades e ameaças nas aplicações

O Website de uma empresa geralmente serve como porta de entrada para os ataques. Aplicativos web são a porta preferida dos invasores.

Isso porque equipes de TI em geral investem apenas em segurança do perímetro e do tráfego da rede, incluindo proteções clássicas como firewall, antivírus, antispam, IDS/IPS, SSH, HTTPS e VPN. E mesmo nestes casos, não fazem um monitoramento proativo e contínuo, nem tem um plano de resposta a incidentes consistente e efetivo. Por outro lado, mantém sistemas desatualizados e ignoram aplicativos falhos que podem, facilmente, ser explorados.

Códigos de software com pouca ou nenhuma preocupação com segurança desde sua concepção — o que passa inclusive pela escolha de tecnologias que já englobem conceitos e mecanismos nativos de segurança, robustez e proteção — escancaram brechas de segurança por todos os pontos das aplicações.

Nas aplicações corporativas internas, as maiores preocupações costumam ser com vazamento de informações e com uso e permissões indevidos — até mesmo maliciosos, no caso de colaboradores insatisfeitos ou despreparados, negligentes, imprudentes.

Mas quando as aplicações são externas, especialmente em portais, sítios e serviços web abertos à Internet, o universo de ameaças subitamente se expande para o mundo todo, para qualquer pessoa no planeta com acesso internet, algum tempo disponível e intenções que podem ir da curiosidade inconsequente ao crime.

Aplicações sem segurança tipicamente expõem vulnerabilidades amplamente conhecidas — do conhecimento de qualquer hacker de plantão — e graves como:

  • Autenticação vulnerável, com usuários e senhas fracas, pouco ou nenhum controle a tentativas de acesso “força bruta” etc.
  • Baixa granularidade de permissões, de forma que um vez acessado com usuário legítimo muitas vezes se permite acessar alguns serviços ou situações que não seriam efetivamente necessárias ou mesmo devidos àquele usuário.
  • Ausência de validação, consistência e crítica de dados no lado servidor, quando um usuário está com JavaScript desativado ou defeituoso no lado cliente.
  • Ausência de validação de condições limite nos tipos, formatos, valores e tamanhos recebidos em dados ou parâmetros fornecidos pelo usuário, permitindo ataques como Estouro de buffer e de pilha, Corrupção de memória, Negação de serviço (DoS).
  • Ausência ou insuficiência de tratamento robusto, inteligente e proativo de exceções na aplicação. Muitas vezes a maior parte das inúmeras situações de erro ou exceção possíveis são esquecidas, descartadas ou subestimadas pelos programadores.
  • Ausência de mecanismos de rastreabilidade e auditoria, como gravação de registros de log/históricos de acessos e ações do usuário e do próprio sistema.
  • Mecanismos de proteção (integridade e privacidade) de dados com criptografia ausentes, simplórios/precários, ou mal implementados.
  • Não evitar Injeção de código, Injeção de SQL, Injeção de HTML e Cross site scripting (XSS) nas entradas de dados e parâmetros fornecidos pelo cliente/usuário.
  • Utilizar ou permitir a Inclusão de arquivos locais (ou remotos).

A lista de possibilidades comuns poderia se estender. Mas por aí já se percebe que boa parte das aplicações na web são “queijos suíços” em potencial, em se tratando de abundância de furos de segurança.

Solução – informação e ferramentas desde o início

Ao abordarem que se deve levar segurança de TI a sério, os peritos apontam o caminho: “A melhor defesa de uma empresa é a integração da segurança no ciclo de vida de desenvolvimento de aplicativos. A criação de códigos com poucas falhas de segurança oferece um retorno maior do que se tentar reparar aplicativos em uso.”

A organização internacional Web Application Security Consortium (WASC) reúne um grupo de especialistas e praticantes de segurança e representantes de comunidades de código aberto, voltada para intercâmbio de idéias e organização e promoção de melhores práticas, em segurança de aplicação na World Wide Web. WASC consistentemente lança informação técnica, artigos, guidelines de segurança e outras documentações úteis sobre segurança de aplicações web.

Entre o material da WASC, destaco uma compilação com descrição de mais de 50 ameaças e vulnerabilidades em aplicações web, o Glossário de Segurança Web e o padrão de referência para avaliação de vulnerabilidades de aplicações web, Web Application Security Scanner Evaluation Criteria (WASSEC). O material é aberto, público e gratuito (em inglês).

Outra entidade dedicada a promover a melhoria da segurança em aplicações de software é a comunidade internacional Open Web Application Security Project (OWASP). Todas as ferramentas, documentação, fóruns e capítulos criados e mantidos pelo OWASP são livres, abertos e isentos.

Entre os projetos e material de referência mantidos pelo OWASP, destacam-se: Enterprise Security API (ESAPI), Development Guide, Ruby on Rails Security Guide, Secure Coding Practices – Quick Reference Guide, Application Security Verification Standard (ASVS), Code Review Guide, Testing Guide, OWASP Top Ten, AppSec FAQ Project, How To’s and Cheat Sheets, Software Assurance Maturity Model (SAMM), Comprehensive, Lightweight Application Security Process (CLASP).

Para a varredura e análise de vulnerabilidades em aplicações existem ferramentas para auxiliar e prover alguma automação e agilidade nos trabalhos. Há desde softwares livres como o Wapiti – Web application vulnerability scanner / security auditor e o OWASP Zed Attack Proxy, até produtos comerciais como IBM Rational AppScan e HP WebInspect / Application Security (veja também Web Application Scanners Comparison).

Também o padrão internacional ISO/IEC 15408: Information technology — Security techniques — Evaluation criteria for IT security é um conjunto de normas disponíveis gratuitamente.

O padrão ISO 15408 é baseado no Common Criteria for Information Technology Security Evaluation / Critérios Comuns para Avaliação de Segurança de Tecnologia da Informação (abreviado como Common Criteria ou CC). Este, por sua vez, é originado dos padrões para critérios de avaliação de segurança do Departamento de Defesa dos Estados Unidos (TSEC), Canadá (CTCSEC) e Europa (ITSEC, França, Alemanha, Países Baixos e Reino Unido).

CC é um framework padronizado de critérios para especificação, implementação e avaliação de requisitos e propriedades de segurança em sistemas de informação e produtos de TI. O rigor da avaliação é medido em sete níveis, Evaluation Assurance Level, EAL1 a EAL7. Cada EAL consiste em um pacote ou conjunto de requisitos de segurança, denominados Security Assurance Requirements (SARs).

Até eu dou modestas contribuições de informação sobre boas práticas que podem garantir um código de aplicação mais segura, nos artigos: Eficiência e segurança com SQL parametrizado e Senhas armazenadas com segurança.

Não faltam informação e recursos livremente disponíveis, em abundância e muitas delas de alta qualidade e fácil utilização, para que as empresas e instituições comecem a praticar e adotar a construção de aplicações seguras.

Essa preocupação é especialmente crítica na web, que cada vez mais se apresenta como um veículo de serviços e aplicações em larga escala e abrangência.

Empresas do meu Brasil (e do mundo!), cuidem seriamente da segurança de suas aplicações e serviços, especialmente na internet!

Para saber mais:

  • Referências sobre Segurança Digital e Privacidade, incluindo Informação sobre segurança, Entidades e centros, Criptografia, Infraestrutura de chaves públicas (ICP), Malware, Segurança de e-mail, Firewall, Prevenção e detecção de intrusos, Padrões, Protocolos e aplicações, Privacidade, Bibliografia e outros tópicos relacionados.

Software Patterns e Frameworks

O mundo do software vem ficando cada vez mais amplo, abrangente e complexo. Se você olhar o universo abrangido por tecnologias como Java, verá que é difícil “enxergar até o fim de seu horizonte”.

Com isso, a curva de aprendizagem de tecnologias para desenvolvimento de software cresce muito. Em contrapartida vão surgindo iniciativas de melhores práticas e modelos prontos para simplificar situações comuns.

Duas forças nesse sentido da simplificação ou organização de situações comuns em software são os Patterns e os Frameworks.

Software Patterns são padrões conceituais que documentam a caracterização e a solução para problemas comuns (genéricos) de construção de software. Visam definir um idioma comum para estas situações (em vez de descrever a situação/problema/solução, você cita o nome dado a ela) e evitar que se “reinvente a roda”.

Existem patterns voltados para modelagem/desenho — design patterns, arquitetura de software — architectural patterns, integração — integration patterns. Embora não sejam específicos do paradigma orientado a objetos, os design patterns surgiram na área de software contemporâneos a esse paradigma e por isso muitas vezes são definidos usando conceitos de OO e mais facilmente aplicáveis em linguagens com suporte a OO.

Frameworks são arcabouços de construção de software. Ainda não encontrei grandes definições para frameworks, mas eu entendo framework como um modelo de trabalho predefinido para implementação de determinado aspecto de software. Um framework costuma englobar bibliotecas, componentes, APIs, estruturas, mecanismos e uma proposição (ou às vezes imposição) de forma de trabalho.

Enquanto patterns são modelos conceituais, frameworks são soluções práticas e específicas para determinada situação e tecnologia/linguagem. Freqüentemente um framework se baseia ou implementa um ou mais patterns aplicáveis àquela situação. Frameworks visam facilitar e acelerar o desenvolvimento de software.

[Texto originalmente postado na lista de discussão MGJUG-users, em 26/jul/2008.]

Livros sobre software patterns:

Para saber mais:

Tiers and Layers – Camadas Físicas e Lógicas

[Atualizado em 31 de outubro de 2008.]

No contexto de arquitetura de software, ambos os termos técnicos Tier e Layer em inglês podem ser traduzidos para português como Camada, em geral relativo a sistemas multi-camadas. Mas cuidado para não haver equívoco ou ambiguidade, pois os dois termos não são meros sinônimos, têm significados distintos.

  • Layer se refere a Camada Lógica de organização dos componentes do sistema ou aplicação.
  • Tier se refere a Camada Física ou Estrutural dos componentes com foco na infraestrutura (hardware, sistema operacional e serviços/servidores) e suas responsabilidades no sistema.

Segundo Peter Eeles, no artigo Layering Strategies, o termo layer (camada) se refere à aplicação do padrão arquitetural genericamente conhecido como Layers Pattern, que estrutura em camadas um sistema que requer decomposição, por algum motivo. Por exemplo, um sistema:

  • que é muito complexo para ser compreendido em seu todo de uma só vez;
  • que é difícil de ser mantido;
  • que é construído por equipes distintas, possivelmente com habilidades e conhecimentos diferentes;
  • cuja maioria dos elementos reusáveis são difíceis de se identificar.

Eis as principais camadas lógicas (layers), segundo Martin Fowler in: Patterns of Enterprise Application Architecture (Addison-Wesley, 2003, ISBN-13 978-032112742-6, 560 p.), Capítulo 1 – Layering, The Three Principal Layers:

Camada Lógica Responsabilidades
Apresentação Interação com usuário (exibição de informações, validação de entrada), provisionamento de serviços.
Domínio / Negócio Lógica específica particular ao sistema ou aplicação.
Acesso a Dados Comunicação com bancos de dados, EIS, sistemas de mensagens, monitores de transação.

Uma boa prática que se prega no projeto da arquitetura de software é que cada camada lógica só deve interagir com a(s) camada(s) imediatamente adjacente(s), visando a maior separação de atribuições (coesão) e o baixo acoplamento.

As camadas físicas (tiers) caracterizam a infraestrutura sobre a qual o sistema ou aplicação executa. As camadas físicas podem variar de acordo com a plataforma e o ambiente tecnológicos específicos que se utiliza. Um modelo canônico de camadas físicas em ambiente web pode ser resumido como a seguir.

Camada Física Caracterização
Cliente Navegador (browser) web, páginas DHTML (HTML, JavaScript, CSS, DOM), componentes/plug-ins adicionais RIA (Flash, Applet Java, JavaFX, ActiveX, XUL etc.), outros objetos MIME (dados, documentos e arquivos em outros formatos).
Rede e Serviço Web Servidor web, protocolo HTTP sobre TCP/IP, processamento de requisição-resposta do cliente web, encaminhamento e integração com servidor de aplicações.
Serviços de Componentes e Aplicação Servidores de aplicação (plataformas mais comuns: Java EE e Microsoft .NET), servidor de objetos distribuídos (EJB, COM+, CORBA etc.).
Serviços de Dados e Integração Servidores de bancos de dados (SGBD), sistemas de mensageria, mecanismos de integração/interação com outros sistemas (EIS).

 

Tipicamente, as camadas lógicas são mapeadas em uma ou mais fatias da camada física da arquitetura. Para exemplificar um mapeamento típico de camadas lógicas em camadas físicas no ambiente web, a apresentação em geral abrange o cliente web, o servidor web e os mecanismos MVC do servidor de aplicação; o domínio ou negócio se concentra no servidor de aplicação; e o acesso a dados se concentra nos servidores de bancos de dados e outros eventuais componentes na camada física de dados e integração.

Contudo, para Eeles, o termo layer é um conceito geral de divisão de um sistema em camadas, que pode ter diversas estratégias de organização e aplicação. Este autor define tier como um caso específico de layer associado a estratégia particular de responsibility-based layering (camadas baseadas em responsabilidades).

Eeles ainda adverte para o fato que mesmo tiers não implicam a efetiva organização ou distribuição física. Um sistema 3-tier pode estar fisicamente em um único hardware, ou ter suas camadas distribuídas entre dois ou mais computadores (grid, cluster, farm etc.).

Para saber mais:

Layers Pattern:

Mouse multi-botões no Ubuntu 8.04

Depois que atualizei para o novo Ubuntu 8.04 LTS Hardy Heron (utilizando a opção automática pelo Gerenciador de Atualizações), quase tudo funcionou perfeitamente.

Observei até agora apenas um problema de configuração: os botões laterais “Avançar” e “Voltar” — que uso freqüentemente para navegação no histórico de páginas web (Firefox) — do meu mouse Logitech MX700 pararam de funcionar. Eles funcionavam até o Ubuntu 7.10 com as configurações que apresentei em meu artigo Mouse multi-botões no Linux.

Pesquisando na Internet, achei o artigo Logitech MX1000 Mouse on Ubuntu 8.04 Linux (Hardy Heron), 2008-04-27, cujas sugestões de configuração funcionaram para mim.

Eis o que fiz.

Primeiro, assegure-se de ter instalado o pacote xserver-xorg-input-evdev referente ao driver evdev. Se necessário, instale o pacote. Você pode fazer isso graficamente pelo Gerenciador de Pacotes Synaptic (menu Sistema > Administração) ou por linha de comando:

sudo apt-get install xserver-xorg-input-evdev

Depois, localize o nome exato do dispositivo do seu mouse.

cat /proc/bus/input/devices

No meu caso, para o Logitech MX700 encontrei N: Name=”PS2++ Logitech MX Mouse”.

Depois, edite o arquivo de configuração do X11. Antes disso, faça uma cópia de segurança.

sudo bash
cd /etc/X11/
cp -p xorg.conf xorg.conf.backup
gedit xorg.conf

Comente a configuração de InputDevice anteriormente existente para o mouse e adicione uma nova similar a esta, usando o driver evdev (minha configuração anterior usava o driver mouse):

Section "InputDevice"
	Identifier	"Logitech MX700"
	Driver		"evdev"
	Option		"Name"		"PS2++ Logitech MX Mouse"
	Option		"HWHEELRelativeAxisButtons"	"7 6"
EndSection

O Identifier pode ser livremente escolhido por você. Se o seu mouse é outro modelo, substitua pelo nome mais apropriado. Já a opção “Name” deve receber exatamente o mesmo nome encontrado no arquivo de devices.

Ainda no arquivo xorg.conf, localize a seção ServerLayout, verifique e atualize a linha InputDevice relativa ao mouse. O nome do InputDevice deve ser o exato Identifier do mouse que você definiu.

Section "ServerLayout"
	...
	Inputdevice	"Logitech MX700"
	...
EndSection

Salve o arquivo xorg.conf.

Pronto. Reinicie o X11, saindo (logout) e entrando novamente, para ativar as novas configurações.

Para testar o funcionamento de todos os botões e controles do mouse no driver evdev, você pode usar a aplicação gráfica xev. Execute a partir de uma janela de comando, pois as informações de eventos gerados na janela gráfica de teste aparecem em texto no console.

Um aviso final: Vi em alguns fóruns que a opção Option "CorePointer" não deve ser usada na seção InputDevice com o evdev. No meu caso, realmente testei adicionar esta opção e o meu mouse ficava completamente inoperante com ela.

Relatórios, gráficos e boletos em Java (2)

Eis uma ampla expansão do artigo Relatórios, gráficos e boletos em Java (2007-11-18), incluindo atualizações de Notas tech da semana (2007-12-01), anúncios de JFreeChart 1.0.9 (2008-01-07) e OpenReports 3.0 (2008-01-06) e várias outras referências.

As ferramentas livres para criação de relatórios estão, aos poucos, ampliando sua abrangência e recursos para a área de inteligência de negócios (business intelligence – BI), integrando recursos como relatórios dinâmicos, ferramentas OLAP (processamento analítico on-line) e ETL (extração, transformação e carga de dados), a partir de armazéns de dados (data warehouse – DW) e outras fontes de informação.

Relatórios & BI

  • OpenReports, solução open source para geração de relatórios, visa ser poderosa, flexível e fácil de usar. Provê geração dinâmica parametrizada baseada em navegador, com recursos de agendamento. Suporta vários mecanismos de relatório open source — JasperReports, JFreeReport, JXLS, Eclipse BIRT –, consultas baseadas em SQL direto com QueryReports e ChartReports, e suporte a OLAP via Mondrian e JPivot.
  • JasperForge, por Jaspersoft, projetos de software livre para inteligência de negócios: Jaspersoft BI Suite; biblioteca de geração de relatórios JasperReports + editor de relatórios iReport, com saída em formato PDF e outros; JasperServer / JasperAnalysis; e JasperETL.
  • DynamicJasper é uma biblioteca open source que cria relatórios Jasper Reports dinamicamente via código, sem a necessidade de se criar arquivos .jasper, simplificando a criação de relatórios de baixa/média complexidade.
  • Pentaho Open Source BI Suite, plataforma e coleção de projetos open source para inteligência de negócios. Inclui Relatórios (incorporou o antigo JFreeReports), Análise (Mondrian OLAP Server), Dashboards, Integração de Dados (Kettle ETL), Mineração de Dados (Weka).
  • Eclipse BIRT (Business Intelligence and Reporting Tools), sistema de produção de relatórios para aplicações web em Java, incluindo um editor de relatório baseado no Eclipse e um componente runtime para o servidor.
  • JPivot, biblioteca de custom tags JSP que renderiza uma tabela OLAP e provê para o usuário navegações OLAP típicas como slice-dice, drill-down e roll-up. JPivot usa Mondrian como servidor e também suporta fontes da dados XMLA.
  • DataVision, ferramenta open source de relatórios no estilo de Crystal Reports, com saída em HTML, XML, PDF, Excel, LaTeX2e, DocBook, arquivo texto delimitado por tab ou vírgula.

Para saber mais:

Gráficos

  • JFreeChart, biblioteca para geração gráficos (barras, pizza, linha etc.), pode ser utilizada com JasperReports, OpenReports e outros.
  • Apache Batik, toolkit para Scalable Vector Graphics (SVG) em Java, inclui SVG Parser, Generator e DOM. Parte do Apache XML Graphics Project.

Boletos

Para saber mais:

  • Artigo “Made in Brazil: Criando seus próprios boletos bancários com o JBoleto”, por Fabio Souza, revista Mundo Java nº 26 (ano V), novembro 2007.

Geração de documentos PDF

  • iText, por Bruno Lowagie, biblioteca para geração de PDF, utilizada por JasperReports, mas pode ser utilizada diretamente para manipulação avançada de PDF.
  • Apache FOP (Formatting Objects Processor), formatador de conteúdo XML para PDF via XSL-FO.

Para saber mais: