Erros de segurança mais comuns no PHP

Elaborei uma lista com os piores erros cometidos por programadores PHP. Essa dica é muito útil, pois você vai aprender o que NÃO deve fazer quando for criar um projeto com PHP. Existem erros que são imperdoáveis, que comprometem todo a segurança do projeto.

Porque vemos tantos erros em projetos feitos com PHP?

O PHP é uma linguagem relativamente simples de aprender, isso faz com que tenham muitos "programadores" que não se preocupam em estudar ou aprender a forma correta de programar e muito menos como fazer um projeto que seja seguro.

Vamos a lista:

1 - Colocar senhas e códigos em arquivos INC

Alguém teve a brilhante ideia de colocar funções, classes e configurações dentro de um arquivo com extensão .INC. Até aí tudo bem, não discuto isso! O problema começa quando as pessoas se esquecem que o apache interpreta ele como um arquivo qualquer de texto.

Qual o problema dele ser interpretado como um arquivo qualquer?

É simples, como qualquer outro arquivo ele pode ser acessado e baixado por qualquer pessoa! Já imaginou as pessoas baixando os arquivos com as credencias de acesso ao banco de dados ou com o código que gera o hash do link de confirmação de email?

Com uma simples pesquisa no Google, eu poderia obter milhares de senhas de bancos de dados. Como meu objetivo é ensinar a se proteger e não a hackear, não colocarei aqui como fazer a pesquisa.

Minha dica é:

Jamais use arquivos com extensão INC.

2 - Gravar senhas sem criptografia ou hash no banco de dados

Esse também é um problema muito grave e, infelizmente, é muito comum. Quando há a necessidade de gravar uma senha no banco de dados, devemos criptografa-la antes de armazená-la ou gravar somente o hash dela.

Isso deve ser feito para que, caso seu banco de dados seja invadido, o invasor não tenha acesso as senhas gravadas nele. As funções mais usadas para fazer o hash é a md5() e sha1().

3 - Recriar register_globals

O register_globals é um recurso presente em versões antigas (e mal configuradas) do PHP. Ele permite que parâmetros passados via GET sejam registrados como variáveis globais.

Como ele por padrão vem desativado e foi descontinuado em versões novas, algumas pessoas tem recriado essa função usando um foreach na variável $_REQUEST.

4 - Não validar dados passados via GET e POST

Essa é uma daquelas que praticamente todo os inciantes em programação cometem. Confiam nos dados que o usuário digita, passa diretamente para um select esses valores, sem validar.

Se você faz isso, prepare-se porque você pode se surpreender com seu site ser hackeado através de uma Injeção de SQL (ou SQL Injection).

Se você faz uma dessas coisas, prepare-se para o pior!