Este post é parte de um artigo escrito por Er Galvão Abbott – http://www.galvao.eti.br
A linguagem PHP é, sem dúvida, uma das mais populares quando o assunto é desenvolvimento de aplicações web, porém a mesma é frequentemente alvo de duras críticas por parte da própria comunidade de desenvolvimento, e não é raro presenciarmos aplicações extremamente vulneráveis que, com toda a certeza, dão razão a estas críticas.
Este preconceito, totalmente equivocado, tem suas origens especialmente na extrema flexibilidade de configuração e uso da linguagem e no número cada vez maior de desenvolvedores inexperientes que começam sua carreira desenvolvendo aplicações PHP, ignorando questões básicas, seja por falta de conhecimento ou porque estão procurando agilizar a sua produção pessoal.
Existem 6 requisitos básicos que toda aplicação deveria possuir e que implementarão o mínimo de segurança em tudo o que você desenvolver.
Requisito 1: Nunca utilize register_globals
Register_globals é sem dúvida alguma a diretiva de configuração mais popular e polêmica já implementada no PHP. É popular entre os desenvolvedores por tornar o processo de programação muito mais ágil e prático. É polêmica porque retira tanto do programador quanto do interpretador da linguagem a responsabilidade em definir a origem das informações utilizadas pela aplicação. Esta diretiva causou tantos problemas que começou a vir desabilitada por default a partir da versão 4.2.0 e será eliminada na versão 6.
Requisito 2: Use require e não include
O comando include e seus derivados – como include_once – é frequentemente usado em detrimento do comando require. Este fato curioso a princípio é conseqüência da similaridade do comando include com outras linguagens, como C e Java. O que muita gente não sabe, porém, é que este comando carrega consigo um risco muito grande para sua aplicação: se por algum motivo a inclusão do arquivo falhar – erro de digitação, disco corrompido, etc… – será gerado um erro de nível warning, um nível leve de erro que não causa a parada da execução do script. Utilizando o comando require, garantimos que, no caso de falha na carga do arquivo seja gerado, além do erro de nível warning, um erro de nível fatal. Isso significa que a execução do seu script será imediatamente interrompida neste caso.
Requisito 3: Filtre a entrada de dados!
Um dos principais conceitos de segurança é a filtrar os dados que são recebidos antes de utilizálos. A falta de filtragem é a causa inúmeros problemas de segurança, incluindo o infame SQL Injection ou Injeção de SQL.
Requisito 4: Sem erros para o usuário
As mensagens de erro foram feitas para que o desenvolvedor possa trabalhar de forma mais prática e descobrir o que ele está fazendo de errado. Observem, entretanto, que, quando uma aplicação atinge maturidade suficiente para “entrar em produção”, torna-se imperativo que o usuário não visualize mensagens de erro. A razão disso é muito simples: mensagens de erro freqüentemente trazem informações sensíveis.
Requisito 5: Esconda do servidor web o que ele não precisa acessar
Quantos de nós não usamos em nossas aplicações um arquivo, tipicamente chamado de congif.php ou setup.php onde guardamos, por exemplo, usuário e senha da base de dados? Não há nada de errado nisso, mas cuidado: se este arquivo não gera saída de informação em HTML porque deixá-lo acessível via web? A solução é simples: movemos o arquivo para fora da raiz web.
Requisito 6: Use Criptografia
Dados sigilosos são chamados assim por um motivo. Quando tratamos especificamente de senhas é impressionante a quantidade de aplicações web que gravam senhas em texto puro na base de dados. Ora, se a senha possui a importância que tem e quem a escolhe é o usuário, por que alguém mais precisa ler essa senha? Se a senha possui este peso em nossa aplicação, não podemos nos dar ao luxo de fazer com que ela trafegue pela aplicação totalmente exposta.
Fonte: Er Galvão – http://www.galvao.eti.br; PHP Magazine – http://www.phpmagazine.com.br
0 comentário