Por que eu devo ler este artigo:A intenção deste artigo é informar, descrever e garantir a conclusão positiva do produto final de qualidade, frisando o desenvolvimento de segurança em PHP nas suas aplicações web. Abordaremos conceitos, metodologias e dicas que norteiam o que há de mais atualizado sobre o assunto, explorando as principais ameaças que o universo web pode oferecer aos códigos PHP que você venha a desenvolver, bem como possíveis soluções e precauções com base no que há de mais recente no mercado.

Este artigo tem como principal objetivo demonstrar ao leitor a real necessidade de incutir segurança em projetos de software. O uso dessa gestão da tecnologia é eficaz para se assegurar a obtenção de um produto seguro de possíveis invasões aos dados do software como um todo. Tais táticas foram criadas de forma a suprir a cada vez maior necessidade de atender a todos os diversos ciclos de vida de um software, e hoje representam um ponto vital da arquitetura e manutenibilidade dos sistemas.

O PHP é uma linguagem de programação de fácil aprendizado, interativa e dinâmica que nasceu com o objetivo de abraçar o desenvolvimento web. Além disso, possui forte integração com outras ferramentas de código aberto, como o banco de dados MySQL, o servidor web Apache, entre outras. Um dos principais motivos pelos quais sites desenvolvidos em PHP são alvos de ataques frequentes são as aberturas e recursos da linguagem que permitem a desenvolvedores menos experientes criar códigos inseguros e deixar grandes brechas na aplicação, levando a perigosas inconsistências. Aliado a isso, a grande popularidade da linguagem entre os desenvolvedores na hora de escolher as tecnologias que usarão para construir seus sistemas leva, consequentemente, a mais pessoas criando códigos inseguros.

Por esses e outros motivos, o PHP é bastante vulnerável a práticas maliciosas, conforme veremos mais adiante. Dessa forma, para tornar o PHP mais seguro, ao longo do artigo serão apresentadas algumas dicas e boas práticas de segurança comuns e eficientes, que podem, inclusive, cooperar entre si para tornar os sites ainda mais seguros.

Entendendo o PHP e suas diversas características

É importante saber que o PHP tem muitas características únicas que o tornam muito adequado para o desenvolvimento web. Tarefas comuns de programação que seriam complicadas em outras linguagens são demasiadamente mais fáceis em PHP, o que gera tanto vantagens quanto desvantagens. Uma característica em particular tem atraído mais atenção do que qualquer outra, a register_globals.

Se você já escreveu aplicações CGI em C em seus primeiros dias de desenvolvimento web, provavelmente saberá quão tedioso o processamento de formulários pode ser. No universo do PHP, as diretivas dos register_globals, por exemplo, quando ativadas, reduzem automaticamente a complexidade na conversão dos dados de formulário, ao assegurar que para cada campo do mesmo teremos variáveis ​​globais em nosso script PHP acessíveis pelo nome do campo precedido do caractere $. Isso faz com que escrever aplicações PHP seja muito fácil e conveniente, mas também representa um enorme risco de segurança.

Na verdade, o register_globals é injustamente difamado. Sozinho, ele não cria vulnerabilidades de segurança — o desenvolvedor deve cometer erros para tal. No entanto, pode-se citar duas principais razões pelas quais você deveria considerar desenvolver e implementar aplicações com o register_globals desativado:

  1. Pode aumentar a magnitude de uma vulnerabilidade de segurança;
  2. Pode esconder a origem dos dados, conflitando com a responsabilidade de um desenvolvedor manter o controle de dados em todos os momentos.

Para tanto, presumiremos que o register_globals estará desativado para o âmbito deste artigo. Em vez disso, usaremos arrays superglobais, como $_GET e $_POST, uma vez que seu uso é quase tão conveniente quanto depender de register_globals, e a ligeira falta de conveniência vale a pena em função do aumento da segurança.

Se você deve desenvolver uma aplicação que pode ser implantada em um ambiente em que o register_globals esteja ativado, é muito importante que inicialize todas as variáveis ​​e defina o controle error_reporting para E_ALL (ou E_ALL | E_STRICT), o que alertará se variáveis ​​não inicializadas forem usadas.

Relatório de erros

Todo desenvolvedor comete erros, e os recursos de report de erros do PHP podem ajudar a identificar e localizar tais erros. No entanto, o nível de detalhamento que o PHP fornece em relação às informações que o mesmo manipula pode ser o suficiente para um atacante malicioso, e isso é certamente indesejável. É importante certificar-se de que informações que comprometam a segurança nunca sejam exibidas ao público em geral, o que pode ser alcançado de forma tão simples quanto a configuração do display_errors para o valor OFF. Claro, você quer ser notificado dos erros, então é interessante definir o log_errors com o valor ON, indicando o local (diretório) onde se deseja salvar o log via variável error_log.

A função padrão do PHP para a configuração do seu nível de report de erros é a error_reporting(), que recebe a constante referente ao nível de log a ser reportado. Se o seu nível de report de erros não estiver configurado adequadamente, poderemos ter alguns erros camuflados pelo PHP. Caso deseje logar apenas mensagens de erro, especificamente, poderá usar error_reporting(E_ERROR), já para as mensagens de e ...

Quer ler esse conteúdo completo? Tenha acesso completo