Usando o Git com um servidor Subversion

No meu último artigo, dei uma dica de como aprender de forma rápida a usar o maravilhoso sistema de controle de versão (SCM) Git. Mas o fato é que atualmente o Subversion (ou SVN) ainda é o SCM mais utilizado no mundo e muitas empresas ainda não migraram para o Git. Mas nem por isso você precisa se desanimar, pois, se quiser, você pode utilizar o Git hoje sem ninguém saber com um servidor Subversion!

O próprio Git fornece uma ferramenta milagrosa chamada “git-svn”. O que o git-svn faz é o seguinte:

  • Clona um repositório Subversion para sua máquina, como faria o Git para qualquer repositório remoto;
  • Recupera os branches e tags do Subversion e configura no Git local;
  • Faz um “fetch” das modificações do repositório Subversion com o repositório Git;
  • Faz o “push” das modificações locais para repositório Subversion;

Resumidamente, o git-svn faz com o Subversion tudo o que o Git puro faria com um repositório remoto. No entanto, os comandos são um pouco diferentes, mas a documentação pode ser encontrada no “man page” do git-svn. Infelizmente a documentação ainda está um pouco aquém do esperado, mas a seguir vou dar algumas dicas de resolução de problemas pelos quais passei.

Problema 1: Git não consegue clonar o repositório SVN

O primeiro problema pelo qual eu passei foi um erro ao rodar o comando “git svn clone”. O problema é que o histórico do meu projeto no Subversion estava muito grande e o servidor não deu conta do processamento feito pelo git-svn. A solução é não clonar todo o histórico do repositório utilizando o parâmetro “-r”. Um exemplo seria:

git svn clone -r 3000:HEAD https://rodrigocarvalho.blog.br/svn/

Neste exemplo, utilizamos o parâmetro “-r” para clonar o histórico a partir da revisão 3000 do SVN até a útima revisão (HEAD). Não existe uma fórmula para escolher a revisão inicial, sendo que consegui encontrar um valor que funcionou para mim na tentativa e erro.

Problema 2: Os branches do SVN não foram para o Git

Após feito o clone, você poderá se dar falta dos branches que tinha no SVN. Caso a estrutura do seu repositório Subversion seja a padrão (trunk, branches, tags), simplesmente utilize o parâmetro “-s”. O exemplo acima ficaria assim:

git svn clone -s -r 3000:HEAD https://rodrigocarvalho.blog.br/svn/

Desta forma ele vai criar no Git os branches que existiam no seu repositório SVN.

No entanto, se a estrutura do seu repositório não for a padrão, você terá que utilizar os parâmentros “–trunk” ou “-T”, “–tags” ou “-t” e “–branches” ou “-b”. Um exemplo seria:

git svn clone --trunk=trunk/projetox --tags=tags/projetox \
   --branches=branches/projetox -r 3000:HEAD https://rodrigocarvalho.blog.br/svn/

Bonus: Git no Windows

Normalmente, as pessoas trabalham com Git pela linha de comando mesmo. Se você utilizar um sistema UNIX (Linux, OSX, *BSD), você terá à sua disposição o bash, que é uma excelente ferramenta modo texto. Adicione o pacote “bash-completion”, aí que o bash vai te facilitar ainda mais a vida!

Infelimente, sou obrigado a trabalhar todos os dias na empresa com no Windows, sistema operacional que tem um console textual muito fraco e que ele não te ajuda em nada… Mas é para isto que existe o cygwin, que emula um ambiente UNIX no Windows! Portanto, ao utilizar Git no Windows, eu recomendo fortemente o uso do Cygwin.

Sua instalação é muito tranquila e pode ser feita mesmo em computadores onde não se tenha permissões de administrador. É só escolher uma pasta de instalação (uma onde se tenha permissão de escrita, por favor), esperar ele baixar a lista de pacotes disponíveis da Internet (sim, igualzinho ao apt, yum etc \o/) e selecionar para instalar todas as ferramentas que considerar úteis. No nosso caso, você vai querer selecionar pelo menos estas:

  1. “git”;
  2. “git-completion” (que é o pacote do bash-completion para os comandos do Git);
  3. “git-svn”.

Espere a instalação baixar tudo que terá um ambiente Git montado no Windows!

Para deixar ainda melhor, eu recomendo o uso da ferramenta Console2 que é melhor do que a janela de linha de comando do Windows, pois oferece abas e possibilidade de redimencionar a janela. Sua instalação também é muito fácil e, após instalado, você deve configurar para ele rodar o Cygwin ao invés do terminal do Windows. Para fazê-lo, vá em “Edit” -> “Settings”.  No campo “Shell” da aba “Console” escreva:

<pasta_do_cygwin>\bin\bash.exe --login -i

Onde “<pasta_do_cywin>” deve ser substituído pelo caminho onde você instalou o Cygwin.

Pronto você terá um ambiente Git muito mais produtivo do que antes!

Aprenda Git e GitHub de forma rápida

Se você trabalha com desenvolvimento de software, provavelmente já ouviu falar do Git e do GitHub, não? (Se nunca ouviu falar, você tem certeza que trabalha com desenvolvimento de software?! :P). Brincadeiras à parte, estes dois juntos revolucionaram bastante o cenário de desenvolvimento de software no mundo – o primeiro com uma proposta nova e melhor de controle de versão e o segundo com uma nova forma de colaboração e socialização na web.

Há muito tempo venho querendo aprender a trabalhar com Git e trabalhar com esta ferramenta escondido da inquisição no trabalho, mas achava que era muito complexo e precisaria dedicar muito tempo para isto. Mas há 2 semanas iniciei um grupo de estudos de criação de ROMs Android na comunidade AndroidInRio e escrevi uma lista de preparativos para nivelar todo o mundo do grupo antes de nossa primeira reunião presencial, foi quando me vi numa situação complicada. Para criação de ROMs, é praticamente obrigatório trabalhar com o código do CyanogenMOD, código este hospedado no GitHub. Mas qual tutorial Git e GitHub eu ia mandar para o grupo, se nem eu mesmo sabia trabalhar com eles?!

Foi então que comecei a buscar e me deparei com um link muito legal: https://help.github.com/. Nele, você encontrará o GitHub Bootcamp que de cara eu vi que era o tutorial perfeito para mandar para o pessoal! No primeiro passo, ele indica o site gitref.org para aprender o básico de Git. O gitref é excelente, com uma leitura fácil e direta. Em seguida no Bootcamp, existem alguns exercícios para instalação e configuração do Git em sua máquina e as tarefas básicas do GitHub, como criar um repositório remoto, fazer fork do projeto de outras pessoas e se socializar.

Enfim, este blablabla todo foi para dizer uma coisa: se você, como eu estava antes, está achando que aprender Git é muito complexo e demorado, faça já o GitHub Bootcamp e, de bônus, entre para a rede social mais útil do mundo! E não se esqueça de me seguir no GitHub em github.com/rcsilva83.

OWASP: Projeto Aberto para segurança em aplicações web

Este artigo foi publicado na edição 24 da Revista Espírito Livre.

** **A OWASP (Open Web Application Security Project ou Projeto Aberto de Segurança em Aplicações Web) é uma organização mundial sem fins lucrativos focada em melhorar a segurança de softwares, em especial os softwares baseados na web. Sua missão é fazer com que a segurança das aplicações seja visível, de forma que pessoas e organizações possam fazer decisões conscientes a respeito dos verdadeiros riscos de segurança das aplicações.

Todos são livres para participar da organização e de sua comunidade, e esta caraterística atraiu a atenção de diversas empresas, tanto as que trabalham com software livre, como a Fundação Mozilla, quanto as empresas comerciais e proprietárias, como Microsoft, Adobe e Oracle. Além disso, diversas universidades americanas são membros da organização.

Outra característica é que ela tenta se organizar de uma maneira descentralizada através dos chamados “capítulos locais”. Estes “capítulos” são grupos locais formado por pessoas interessadas em ajudar a OWASP a atingir seus objetivos fomentando localmente os princípios e boas práticas pregadas pela organização. O Brasil atualmente conta com dois capítulos: Brasília e São Paulo. Adicionalmente, como forma de divulgação, são promovidos diversos eventos no mundo todo, inclusive no Brasil que, em 2010, teve sua segunda edição do OWASP AppSec.

Para alcançar seu objetivo, a OWASP desenvolve diversos projetos, tanto de software quanto de documentação, e todos eles são licenciados sob licensas livres, tornando o acesso a eles muito fácil e democrático. A seguir detalharei melhor alguns dos principais projetos.

Top 10

O Top 10 é uma lista dos 10 ataques a segurança de aplicações web mais críticos existentes. Este é, provavelmente, o projeto mais famoso da OWASP e é atualizado frequentemente, sendo que a última versão é deste ano (2010) com a seguinte lista de ataques:

  1. Injeção: ocorre quando um dado não confiável é enviado a um interpretador como parte de um comando ou consulta. O tipo de injeção mais famoso é o SQL Injection que permite que o atacante execute quaisquer comandos SQL no banco de dados da aplicação vulnerável.
  2. Cross-site Scripting (XSS): ocorre quando uma aplicação obtém um dado não confiável e envia para um navegador web sem correta validação e escapamento. Permite que um atacante execute quaisquer scripts (normalmente Javascript) no navegador da vítima.
  3. Autenticação e gerenciamento de sessão quebrados: ocorre quando a autenticação e o gerenciamento de sessão da aplicação não são feitos de forma correta, permitindo que o atacante comprometa senhas, chaves, sessões web, assumindo a identidade da vítima.
  4. Referência direta insegura a objeto: ocorre quando o desenvolvedor expõe uma referência a um objeto interno, como um arquivo, diretório ou chave de banco de dados. Sem uma checagem de controle de acesso ou outra proteção, atacantes podem manipular estas referências para acessar dados não autorizados, como arquivos confidenciais.
  5. Cross-site Request Forgery (CSRF): força o navegador web da vítima logada numa aplicação a enviar um request forjado, incluindo o cookie de sessão da vítima e qualquer outra informação de autenticação incluída automaticamente, para uma aplicação vulnerável. Isto permite que o atacante force o navegador da vítima a gerar *requests *que a aplicação vulnerável pensa que são vegítimos.
  6. Problema com configurações de segurança: boa segurança requer ter uma configuração de segurança bem definida e implantada para a aplicação, frameworks, servidor de aplicação, servidor web, servidor de banco de dados e plataforma. Todas estas configurações devem ser definidas, implementadas e mantidas quando não são liberadas com configurações padrão seguras. Isto inclui manter todo o software atualizado, incluindo todas as bibliotecas utilizadas pelas aplicações.
  7. Armazenamento criptográfico inseguro: ocorre quando a aplicação protege incorretamente seus dados sensíveis (como números de cartões de crédito e credenciais de autenticação) com criptografia ou *hash *adequados. Os atacantes podem roubar ou modificar estes dados para conduzir roubo de identidade, fraude de cartão de crédito ou outros crimes.
  8. Falha ao restringir acesso a URL: ocorre quando a aplicação restringe o acesso a uma página reservada apenas pela interface, ou seja, não exibindo os *links *para ela. Um atacante pode obter o link para esta página e acessá-la diretamente.
  9. Proteção em nível de transporte insuficiente: ocorre quando uma aplicação falha ao autenticar, encriptar e proteger a confidencialidade e integridade do tráfego de rede sensível. Isto pode acontecer com o uso de algorítmos de criptografia fracos, usam certificados digitais expirados ou inválidos ou não os usam corretamente.
  10. Redirects **e **forwards **não validados:** ocorre quando uma aplicação redireciona ou encaminha um usuário a outras páginas ou sites e usam dados não confiáveis para determinar a página de destino. Sem validação apropriada, atacantes podem redirecionar vítimas para sites de *phishing *ou *malware *ou usam *forwards *para acessar páginas não autorizadas.

Além de ser um poderoso documento de conscientização, para cada uma das vulnerabilidades listadas são ensinadas formas de evitar que sua aplicação fique vulnerável. Vale muito a pena ler as explicações mais aprofundadas de cada vulnerabilidade e, principalmente, nas formas de prevenção.

WebGoat

O WebGoat é uma aplicação web feita em Java com diversas falhas de segurança feita para ensinar lições de segurança em aplicações web. Em cada lição, o usuário deve demonstrar que entende um problema de segurança explorando a vulnerabilidade do WebGoat. Por exemplo, uma das lições o usuário precisa fazer um ataque de *SQL Injection *para roubar números falsos de cartões de crédito. A aplicação é um ambiente de aprendizado realístico e provê aos usuários dicas e código que explicam cada lição.

WebScarab

O WebScarab é um aplicativo desktop feito em Java (portanto é multiplataforma) utilizado como um proxy web. Após configurar seu navegador para utilizar a porta aberta pelo WebScarab como proxy HTTP, você pode utilizá-lo para analisar todo o tráfego entre o navegador e a aplicação que está sendo acessada, bem como alterar o conteúdo do request enviado originalmente. Assim, ele pode ser utilizado para identificar falhas de segurança em sua aplicação web sem alterar a interface de usuário da mesma.

ESAPI

A ESAPI é uma API de controle de segurança que torna fácil aos desenvolvedores escreverem aplicações com baixo risco. Disponível para as plataformas como Java, .NET, Python e PHP, a ESAPI tem o seguinte design básico para todas as implementações:

  • Ter um conjunto de interfaces de controle de segurança;
  • Ter uma implementação de referência para cada controle;
  • Poder, opcionalmente, utilizar sua própria implementação para cada controle;

O diagrama abaixo mostra todos os módulos os controles contemplados pela ESAPI.

AntiSamy

O AntiSamy é uma API utilizada para evitar que código HTML e CSS malicioso afete sua aplicação e evitando, assim, um ataque de XSS. A API faz isso fazendo uma validação do HTML/CSS recebido do cliente e o valida através de uma whitelist, que é uma lista de elementos HTML/CSS seguros de serem aceitos pela aplicação. Ele tem suporte a mensagens de erro amigáveis e suas políticas de validação podem ser personalizadas.

Guias

Além de software, a OWASP elabora uma rica documentação sobre o assunto e uma parte desta documentação é composta por três importantes guias:

  1. Guia de desenvolvimento: provê um guia prático com exemplos de código em Java, .NET e PHP, cobrindo um extenso leque de problemas de segurança;
  2. **Guia de revisão de código: **objetiva guiar o revisor de código na busca por vulnerabilidades da aplicação;
  3. Guia de teste: objetiva criar melhores práticas para testes de penetração em aplicações web;

Conclusão

Como vimos ao longo deste artigo, a OWASP é uma organização bastante ativa e que desenvolve diversos projetos importantes para a melhoria na segurança das aplicações web. O melhor de tudo é que estes projetos são todos liberados sob licenças livres, que facilitam sua adoção e implantação inclusive em empresas.

Além disso, por sua natureza aberta, qualquer pessoa é livre para virar um contribuidor de melhorias e correções para os produtos. Existem projetos muito interessantes ainda em desenvolvimento e que podem ser um local divertido para aprender novas tecnologias e contribuir com o software livre.

Que fique claro, no entanto, que o que eu apresentei foi apenas uma pequena parte do que a OWASP desenvolve. Recomendo fortemente a todos os desenvolvedores de aplicações web que naveguem pelo site e descubram tudo que ela tem a oferecer.

Referências:

Créditos: Grande parte do conteúdo do artigo foi baseado no material do próprio site da OWASP.

 

Palestra Integração Contínua com Softwares Livres

Já está disponível na página de Palestras, a apresentação que fiz ontem no Flisol 2011 RJ. Infelizmente não pude filmar, mas estou disponibilizando a apresentação sob licença Creative Commons BY-SA para que, quem quiser, possa apresentá-la. Sugestões podem ser feitas nos comentários abaixo.

Abraço!

A nova geração de ambientes desktop

Estamos começando o mês de abril de 2011, um mês em que dois novos ambientes desktop para Linux serão apresentados para as massas: Unity e Gnome3. Ambos prometem modificar significativamente a forma como interagimos com o computador, cada um a sua maneira. Como preparativo para estas novas versões (das quais pretendo testar e publicar aqui minhas impressões), neste artigo vou dar uma visão geral e explicar um pouco do que esperar de cada um.

Unity

Ambiente desenvolvido pela Canonical para a versão para netbooks do Ubuntu que virá como ambiente padrão também na vesão desktop da popular distribuição. Com o uso padrão deste ambiente, muita coisa mudou nele para que ficasse estável e atendesse as necessidades dos usuários com telas maiores.

A palavra de ordem do Unity é “eficiencia”. Em cada escolha feita pelo time da Canonical vê-se claramente que eles querem utilizar o espaço do monitor da forma mais eficiente possível. Claramente esta é uma herança das raízes “netbookianas” do ambiente, mas que não deixa de ser uma preocupação para outros tipos de usuário.

Algumas características essenciais dele são:

  1. Menu global de aplicativos: o menu dos aplicativos ficam na barra superior, como no MacOS X;
  2. Launcher: é uma barra localizada do lado esquerdo, que é uma mistura de dock, também inspirado no MacOS X, com um painel. Ele é localizado na lateral, pois, com o advento das telas widescreen, o espaço vertical ficou mais disputado do que o horizontal;
  3. Dash: uma tela onde você pode abrir aplicativos ou abrir pastas, sempre por meio de navegação ou por um campo de busca. O dash também suporta plugins chamados de “lentes” que adicionam funcionalidades, como integração com outros aplicativos (ex: enviar uma mensagem via Empathy) ou com sites (ex: fazer uma busca no Google);

Gnome3

Na nova versão do ambiente desktop mais popular do Linux trás novos paradigmas e uma apresentação totalmente diferente da versão 2. Esta versão está em desenvolvimento há muito tempo, afinal foi um ano de atraso (o plano inicial de laçamento do Gnome3 era de abril de 2010), mas este último ciclo de desenvolvimento mudou muita coisa.

A palavra de ordem do Gnome3 é “foco”. Os especialistas de interface do projeto estão levando o conceito minimalista do Gnome ao extremo, de forma que o usuário tenha um ambiente com poucas distrações e de alta produtividade.

Algumas características essenciais dele são:

  1. Barra superior: o painel do Gnome morreu na forma como era conhecido. Agora só existe uma barra superio que é composta pelo botão “Atividades”, relógio e ícones de configuração do sistema;
  2. Modo panorama: clicando no botão “Atividades” no modo panorama, onde são exibidos todos os aplicativos abertos e áreas de trabalho virtuais em uso, bem como um dock (semelhante ao do MacOS X) com aplicativos favoritos e abertos. Este modo, é semelhante ao Dash do Unity, pois também é possível abrir pastas e aplicações;
  3. Áreas de trabalho virtuais: esta funcionalidade velha conhecida de qualquer usuário Linux (independente do ambiente desktop) sofreu uma alteração interessante. Agora elas são criadas dinamicamente, a medida que se faz necessário;

Conclusão

Como eu disse no início, esta é apenas uma análise superficial dos ambientes e, assim que suas versões estáveis forem lançadas, eu vou escrever um texto mais completo sobre cada um. De qualquer forma, já dá para ver que muita coisa vai mudar e espero que estas mudanças sejam para melhor.