Neste artigo veremos maneiras de como prevenir injeção de código no PHP, utilizando estratégias para proteger o seu código e banco de dados.
Fala programador(a), tudo bem? Bora aprender mais sobre PHP e SQL Injection!
A primeira ação que você deve tomar é não utilizar a biblioteca mysql do PHP e suas funções
A biblioteca não é insegura, mas pode deixar lacunas em algumas situações que favoreçam a alguma injeção de código
Você então pode optar por mysqli ou PDO (minha indicação)
Na biblioteca PDO você consegue utilizar prepared statements, que é uma arma muito boa contra a SQL Injection
Que é basicamente isso aqui:
$sql = 'INSERT INTO tabela(nome, password, status) VALUES(?, ?, ?)';
Essas interrogações farão com que o dado passado seja processado para apenas executar texto na consulta SQL
Protegendo você de eventuais ataques
Os valores em interrogação, depois serão substituídos com o método bindValue
Desta forma:
$stmt->bindValue(1, 'nomeDoUsuário');
Estas duas etapas da query que ajudam a reduzir as vulnerabilidades
A query não é executada após a sua formação e sim após estes conjuntos de métodos
Validações
Além disso, outras boas práticas necessárias são validações tanto no front quanto no back-end
Primeiramente requerendo que o valor passado seja no formato que será inserido no banco de dados
Por exemplo: um nome, este valor não pode conter números, então faça estas validações
E também removendo caracteres especiais que não são necessários, pois são por eles que a maioria dos injections são originados
Inclusive espaços em branco!
Outras recomendações
Não aceite tipos de request diferentes do propósito da consulta, por exemplo, em uma inserção de dados verifique se o request é mesmo um POST e não um GET
Não exiba erros de SQL para o usuário, isso fará com que ele entenda como o banco se comporta e também descubra detalhes que poderão te prejudicar
Todos os erros do sistemas devem possuir um log para análise posterior, e então ser verificada alguma tentativa de invasão por Injection ou força bruta
Conclusão
Neste artigo vimos como prevenir injeção de código no PHP
O assunto é muito amplo, mas a maioria dos problemas se previne utilizando o prepared statements e principalmente validando todos os dados que são passados pelo usuário
As outras dicas também são importantes, como não mostrar erros de SQL, isso pode revelar a modelagem do banco e aí o hacker conseguir invadir de alguma outra forma
Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube