Capítulo 15. Segurança

Índice
Considerações Gerais
Instalado como binário CGI
Instalando como um módulo do Apache
Segurança de sistema de arquivos
Segurança de Bando de Dados
Relatório de Erro
Usando Register Globals
Dados Submetidos pelo Usuário
Escondendo o PHP
Permanecendo atualizado

PHP é uma liguagem poderosa e interpretadora, se incluida num servidor web como um módulo ou executado em separado com um binário CGI, está apta a acessar arquivos, executar comandos e abrir conexões de rede no servidor. Estas propriedades fazem qualquer coisa rodar em um servidor web inseguro. PHP é designado, especificadamente, para ser uma linguagem mais segura para escrever programas CGI do que Perl ou C, e com a seleção correta da configuração de opções na compilação e na execução, e práticas de codificação apropriadas, ele pode te oferecer exatamente uma combinação de liberdade e segurança que você precisa.

Como existem muitos caminhos diferentes de utilizar o PHP, há muitas opções de configuração controlando o seu comportamento. Uma grande seleção de opções garantem que você pode utilizar o PHP para uma infinidade de propósitos, mas isso também significa que há combinações destas opções e configurações do servidor que resultam em uma estrutura insegura.

A flexibilidade da configuração do PHP é igualmente rival da flexibilidade do código. O PHP pode ser usado para construir aplicações completas para servidores, com todo o poder de um usuário shell, ou ele pode ser usado para simplesmente server-side includes com baixo risco em um ambiente firmemente controlado, e quão seguro ele é, depende amplamente da capacidade do desenvolvedor PHP.

Este capítulo começa com alguns avisos gerais de segurança, explica as diferentes combinações de opções de configuração e as situações que elas podem ser seguramente utilizadas, e descreve diferentes considerações em codificação para diferentes níveis de segurança.

Considerações Gerais

Um sistema completamente seguro é uma impossibilidade virtual, então uma aproximação geralmente utilizada na profissão de segurança é a de balancear risco e usabilidade. Se cada variável submetida por um usuário requer dois formulários de validação biométrica (tal como um escaneamento da retina e impressão digital), você teria um nível extremamente alto de responsabilidade. Isto também levaria meia hora para preencher um formulário complexo corretamente, que tenderia a encourajar usuários a encontrar maneiras de contornar a segurança.

A melhor segurança é geralmente discreta o bastante para satisfazer as exigências sem o usuário ser prevenido da insegurança na execução de seu trabalho, ou sobrecarregar o autor do código com excessiva complexidade. Sem dúvida, alguns ataques à segurança são meramente formas de se aproveitar desta segurança exacerbada, que tende a corroer-se com o tempo.

Uma frase digna de lembrança: Um sistema é tão bom quanto o mais fraco elo de uma corrente. Se todas as transações são logadas pesadamente baseadas no tempo, localização, tipo de transação, etc. mas o usuário é verificado através de um simples cookie, a validação da conexão com os usuários para o log da transação é severamente enfraquecido.

Quando testando, lembre-se que você não está apto a testar todas as possibilidades, mesmo para a mais simples das páginas. A entrada que você pode esperar será completamente sem relação com a entrada dada por um trabalhador decepcionado, um "cracker"(pessoa com habilidades de quebrar códigos de acesso a programas e etc) com meses do tempo em suas mãos, ou um gato passeando pelo teclado. Isto porque, é melhor observar o código por uma perspectiva lógica, para dicernir onde dados inesperados podem ser introduzidos, e então segue como eles são modificados, reduzidos, ou amplificados.

A internet é cheia de pessoas tentando fazer um nome para elas, quebrando o seu código, detonar o seu site, colocar conteúdo impróprio, e de outra forma fazer o seu dia ficar interessante. Isso não importa se você tem um pequeno ou um grande site, você é um alvo por está simplesmente online, por ter um servidor que pode está conectado. Muitos programas de "Cracking" (programas utilizados pelos crackers) não enxergam pelo tamanho, eles simplesmente arrastam em massa blocos de IP procurando por vítimas. Tente não ser uma delas.