segunda-feira, 12 de dezembro de 2011

UD Web Rádio está no ar!

UD Web Rádio está no ar! Do que se trata? É uma radio web focada em software livre.

Do blog Ubuntu Dicas, tem uma programação que alterna entre a divulgação de notícias e eventos sobre software livre e a execução de músicas registradas em copyleft (as chamadas 'músicas livres'). Quer saber o melhor disso tudo? A rádio não tem intevalos comerciais! Não é o máximo?

Para saber mais, acesse UD Web Radio.

Ouça, compartilhe e (se puder) colabore!



sexta-feira, 14 de outubro de 2011

projeto simples (ou não)

Projeto de desenvolvimento de um site simples. Será? Repare na descrição:
Como assim "Site Institucional simples" que gera ordens de serviço?
Muito controverso, não acham?

quinta-feira, 28 de julho de 2011

Primeiros passos - Python

O que é Python?

Python é uma linguagem de programação de alto nível, interpretada, imperativa, orientada a objetos, de tipagem dinâmica e forte. Foi lançada por Guido van Rossum em Atualmente possui um modelo de desenvolvimento comunitário, aberto e gerenciado pela organização sem fins lucrativos Python Software Foundation.
A linguagem foi projetada com a filosofia de enfatizar a importância do esforço do programador sobre o esforço computacional. Prioriza a legibilidade do código sobre a velocidade ou expressividade. Combina uma sintaxe concisa e clara com os recursos poderosos de sua biblioteca padrão e por módulos e frameworks desenvolvidos por terceiros. (fonte: Wikipedia)

Isso significa que python visa facilitar o trabalho do programador, sendo uma linguagem simples, de fácil aprendizado e ao mesmo tempo muito poderosa, graças aos módulos desenvolvidos para ela.

Neste artigo vamos dar o primeiro passo para o desenvolvimento de aplicações com esta linguagem.

Instalação
Ambiente Linux
A instalação em ambiente Linux é bem simples. Abra seu gerenciador de pacotes (em distros derivadas do Debian, geralmente utiliza-se o Synaptic) e procure pelo pacote python. Você pode encontrar diversas versões do mesmo, como python2.5, python 2.6, etc. Escolha uma versão para instalar em seu sistema. Não recomendo instalar a última versão, ainda mais se ela for beta. É mais seguro instalar uma versão um pouco anterior. Hoje, 14 de Fevereiro de 2010, a versão 3.0 é a mais recente, mas recomendo a instalação da versão 2.5 ou 2.6 .

Ambiente Windows
Para a instalação do python em ambiente windows, baixe o instalador aqui . O procedimento de instalação é simples e intuitivo (basicamente consiste em confirmar todas as opções)

Primeiro exemplo: Alô Mundo!!!
Nosso primeiro exemplo de código python é ridiculamente simples. Abra seu editor preferido e adicione as seguintes linhas:
#!/usr/bin/env python
# apenas para quem usa linux, adicionar a linha acima

# -*- coding: iso-8859-15 -*-
print “Alo mundo!!!”
Pronto. Salve o arquivo como alomundo.py.

Compreendendo o código
Compreender o exemplo acima não é difícil. A primeira linha (#!/usr/bin/env python) diz para o Linux que este arquivo é um script python e que, na execução, deve ser enviado para o interpretador python, que irá executar os comandos em tempo real, como uma máquina virtual. No caso do Windows, a extensão .py é relacionada ao interpretador python.
A linha logo abaixo é um comentário. Comentários são ignorados pelo compilador/interpretador, portanto pode-se colocar o que quiser neles.
Na linha 4 temos a indicação da codificação do arquivo. Todo arquivo texto é escrito sob uma codificação.O sistema deve ser capaz de traduzir o texto conforme a codificação informada e mostrar (principalmente) a acentuação correta. Muitas vezes, a codificação padrão do sistema não condiz com a utilizada no arquivo, então temos de informá-la manualmente, para forçarmos o sistema a usar a codificação correta. Isso evita problemas com acentuação. A quarta linha indica que o arquivo foi escrito utilizando codificação iso-8859-1, que aceita acentuação. Em muitos casos, códigos de programas são escritos em unicode (geralmente, UTF-8), o que torna o uso de caracteres especiais mais complexo.

A sexta linha possui apenas a instrução print e uma mensagem entre aspas que será exibida na tela.
Códigos python não precisam ser encerrados com “;” , como na maioria das linguagens de programação. A existência de uma nova linha determina o fim da linha anterior. A identação do código também é diferente, mas será discutida mais adiante.

Uma experiência nova
Quando instalamos o python, obtemos um interpretador dinâmico (para usuários Linux, pode-se encontrálo no menu aplicações > programação > python e para usuários Windows, está em iniciar > programar python idle (gui) )
A janela que se abre é um canal direto para o interpretador da linguagem, ou seja, o python vai executando todas as linhas que forem digitadas nesta janela. Quer fazer um teste? Abra o interpretador e digite: “ print 2 + 2 ” . Além da mensagem ser mostrada imediatamente depois do Enter ser pressionado (nenhuma linha será executada sem que o Enter seja pressionado), a expressão é lida como um cálculo e processada. Por isso o resultado é 4. Se colocar a expressão entre aspas, ele irá interpretar os números como se fossem string ( letras ) e escreverá “ 2 + 2 ” na tela. Mas sem as aspas, os números são interpretados como números mesmo e o cálculo é realizado.
Faça alguns teste com print utilizando (ou não) as aspas e apóstrofos ( popular “aspas simples” ) e observe o resultado.

quinta-feira, 14 de julho de 2011

Apostila PHP e MySQL

Há algum tempo atrás escrevi uma apostila de PHP e MySQL para servir como material didático em cursos que ministrei. O material foi feito especialmente para iniciantes, explicando em detalhes o básico sobre programação para quem está começando no desenvolvimento web.
O site scribd disponibiliza este material atualmente. Para baixar, é necessário estar logado no site (pode-se usar sua conta do facebook para o login). Após logar-se você pode baixar a apostila de PHP e MySQL nas versões PDF ou TXT. O material está disponibilizado sob licença creative commons.

Caso não consiga baixar via Scribd, tente fazer o download diretamente do meu Dropbox pelo link abaixo (é preciso compartilhar o link para poder baixar o arquivo).


 Bom download e bons estudos :D

quinta-feira, 16 de junho de 2011

PHP: protegendo formulários de ataque XSS

O ataque XSS consiste em enviar um script pelo formulário (seja de cadastro, login, etc) para ser executado pelo servidor. Muitas pessoas utilzam-se dessa técnica para capturar dados de um site, como dados de sessão, senhas, etc.
Prevenir esse tipo de ataque é muito simples. Nesse post vou apresentar alguns comandos que são uma 'mão na roda' contra esse tipo de ataque:

htmlentities():
Essa função transforma caracteres especiais (e letras com acento) html em entidades html. Exemplo:
Ele converte o sinal '<' em '&lt;' e o sinal '>' em '&gt;' . Dessa forma, impede que códio PHP seja executado quando o script interpretar os dados do formulário. Ele também é utilizado para tratar caracteres com acento, já que os converte em suas respectivas entidades html. Exemplo: a palavra 'ação' depois de tratada por essa função é convertida em 'a&ccedil;&aacute;o' , permitindo melhor interpretação do navegador.
Obs: Para que a conversão de caracteres acentuados ocorra corretamente, use essa função combinada com utf8_decode().

Exemplo de uso:
$comentario = htmlentities(utf8_decode($_POST['comentario']));

Dessa forma, o comentário enviado tem seus caracteres especiais convertidos como nos exemplos acima.

strip_tags()
Problema resolvido! Ainda não. Se o conteúdo do comentário for um código javascript como esse:
'<script>alert('eu sou o XSS!');</script>'. Por se tratar de código javascript, pode ser executado pelo navegador do cliente na hora em que for exibido no site. O ideal seria remover todas as tags html do conteúdo, certo? Então vamos utilizar a função strip_tags(). Ele remove todas as tags html do código (removendo assim a tag script), impedindo a execução de códigos como esse. Além disso, remove a formatação feita pelo usuário, que geralmente causa problemas de layout (usuário altera o tamanho da letra usando a tag font, por exemplo).

Vamos então melhorar nosso código:
$comentario = htmlentities(utf8_decode(strip_tags($_POST['comentario'])));

O ideal é executar a função strip_tags() antes de htmlentities(), para que ele seja usado apenas para tratar os acentos.

addslashes():
Essa talvez seja uma das funções mais importantes a ser comentada aqui. Ela coloca uma barra '\' antes dos caracteres especiais, como aspas, apóstrofos, cifrões, etc. Em geral, ataques de injeção de SQL (quando o usuário mal intencionado tenta enviar comandos sql pelo seu formulário para obter informações) são feitos utilizando-se de aspas ou apóstrofos, para manipular o código sql definido no script. Ao filtrar os dados com essa função, as aspas e apóstrofos não serão tratadas como delimitadoras da string, mas como parte dela, evitando assim esse tipo de ataque.

Nosso código agora está assim:
$comentario = addslashes(htmlentities(utf8_decode($_POST['comentario'])));

trim():
Por último e não menos importante, a função trim remove espaços em branco do início e do fim da string. Eu sei, isso não ajuda em nada na segurança do site, mas previne erros na hora da gravação. Espaços em branco são considerados parte da string. E se por acaso você tiver um campo no banco de dados que aceita apenas 30 caracteres e o usuário envia 31 (incluindo os espaços)? O resultado é um erro na hora da gravação. Para evitar esse tipo de dor de cabeça, o melhor que temos a fazer é prevenir esse tipo de situação.

Agora, o código final:
$comentario = addslashes(htmlentities(utf8_decode(trim($_POST['comentario']))));

Extenso, não? Mas previne muita dor de cabeça. Para facilitar sua vida, crie uma função que execute todas as citadas acima:

function tratarStrings($string){
    return addslashes(htmlentities(utf8_decode(trim($string))));
}
Em seguida, basta executá-la onde for necessário:
$comentario = tratarStrings($_POST['comentario']);

Campos de data (que geralmente estão no formato dd/mm/aaaa) podem ser tratados tranquilamente com essa função.
Caso a informação ser tratada seja um número inteiro ou de dupla precisão ('quebrado'), pode-se converte-lo da seguinte forma:
$id = (int) $_GET['id'];
$valor = (double) $_POST['valor'];

Dessa forma, os números enviados serão convertidos para os tipos informados entre parênteses. Se a informação enviada for uma string, o resutado será zero.

Dúvidas? Deixe nos comentários :D

Instalando DBDesigner no Ubuntu

Essa dica serve tanto para o Ubuntu quanto para outras distros baseadas no Debian.

Para quem não conhece, o DBDesigner é uma ferramenta para modelagem visual de banco de dados. Ele permite que você faça o projeto do seu banco de dados graficamente e depois gere o arquivo .sql para criação do banco. Foi desenvolvido inicialmente para ser usado em bancos de dados Firebird, mas também pode ser usado com MySQL.

No site da FabForce, encontram-se apenas os pacotes em formato .tar.gz (eles funcionam, mas não é a mesma coisa, entende?), mas o programa também é distribuído em formato de pacote .deb (para felicidade de muitos). Para instalar, siga o procedimento abaixo:

Baixe o libborqt6 através deste link e instale na sua máquina.
Pronto? agora baixe o DBDesigner a partir desse link e instale.

Pronto! seu DBDesigner está instalado e pronto para usar.