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!