Com este artigo iniciamos uma série de posts em que vamos explorar alguns problemas básicos de segurança relacionados com a injeção de instruções SQL em formulários web ou parâmetros da URL.
Serão apresentados exemplos de código com problemas de segurança e de como os evitar.
Então vamos começar por um simples formulário para login implementado com o seguinte código:
Neste exemplo o código verifica se foi devolvido mais do que um registo da base de dados, assumindo assim que as credenciais fornecidas estão corretas.
O maior erro envolve a concatenação dos valores recebidos do formulário com a instrução SQL, permitindo, por isso, que o utilizador manipule a instrução ao seu belo prazer.
Independentemente do nome de utilizador inserido basta escrever na palavra passe o seguinte texto para se optar a indicação de que o login foi concluído com sucesso: o' or 1=1 #
Com este texto a instrução SQL vai devolver sempre um registo pois 1 é igual a 1. O # no final permite ignorar o resto da instrução pois é o simbolo para comentários em MySQL.
A solução para este problema passa por utilizar parâmetros, preparando a instrução antes de a executar. Assim o seguinte código resolve este problema: