Como usar prepared statements contra SQL injection Print

  • 0

Como usar Prepared Statements contra SQL Injection: um guia simples para proteger seu site

Olá, amigo(a) desenvolvedor(a) ou administrador(a) de site! Aqui é o Sensei da GeHost, e hoje vamos conversar sobre algo muito importante: proteger seu banco de dados contra ataques de SQL Injection.

Imagine que um hacker entra no seu site e, com apenas um formulário mal escrito, consegue ler todos os dados dos seus usuários — senhas, e-mails, dados pessoais. Triste, né? Mas isso acontece quando o código não é escrito com segurança.

Por sorte, existe uma técnica poderosa chamada Prepared Statements — e hoje você vai aprender como usá-la, mesmo que não seja um expert em programação.

Dica do Sensei: SQL Injection é como deixar a porta do seu banco de dados aberta com uma chave que todo mundo pode usar. Prepared Statements são como colocar um cadeado inteligente que só abre com a senha certa — e só depois de verificar tudo.

O que são Prepared Statements?

Prepared Statements são uma forma de escrever consultas ao banco de dados que separam os dados das instruções. Isso significa que o banco de dados sabe exatamente o que é código (comando SQL) e o que é informação (como um nome ou e-mail).

É como se você dissesse: "Faça isso com esse valor", e não "Faça isso com esse texto aqui que pode ter comandos perigosos".

Como usar Prepared Statements na prática (passo a passo)

Vamos usar um exemplo simples: um formulário de login. Em vez de escrever a consulta assim:

SELECT * FROM usuarios WHERE login = 'admin' AND senha = '123456';

...que é perigoso, porque um hacker pode colocar ' OR '1'='1 no campo de senha e entrar sem senha!

Com Prepared Statements, você faz assim:

  1. Prepare a consulta com placeholders (como ? ou :nome).
  2. Envie os dados separadamente — o banco entende que são apenas dados, não comandos.
  3. O banco executa a consulta com segurança, sem interpretar os dados como código.

Exemplo em PHP (com MySQLi)

Veja como isso funciona na prática com código real (sem medo — é bem simples!):

// Conexão com o banco (já feita)
$mysqli = new mysqli("localhost", "usuariobd", "senha", "meubanco");

// Verifica conexão
if ($mysqli->connect_error) {
    die("Erro na conexão: " . $mysqli->connect_error);
}

// Prepara a consulta com placeholders
$stmt = $mysqli->prepare("SELECT id, nome FROM usuarios WHERE login = ? AND senha = ?");

// Vincula os parâmetros (tipo: s = string, i = inteiro)
$stmt->bind_param("ss", $login, $senha);

// Define os valores (sem perigo!)
$login = "admin";
$senha = "123456";

// Executa a consulta
$stmt->execute();

// Obtém resultados
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    echo "Login bem-sucedido!";
} else {
    echo "Usuário ou senha incorretos.";
}

// Fecha a consulta
$stmt->close();
$mysqli->close();
Dica do Sensei: Sempre use bind_param() para vincular os dados. Isso garante que o banco nunca interprete os dados como código SQL.

Como garantir que seu site está protegido?

Veja o que você pode fazer agora mesmo:

  • Use sempre Prepared Statements em consultas que recebem dados do usuário (formulários, URLs, etc.).
  • Não concatene strings diretamente em consultas SQL.
  • Use bibliotecas seguras como MySQLi ou PDO com modo de preparação.
  • Evite usar funções como mysql_query() — elas estão obsoletas e inseguras.

Como verificar se seu sistema está seguro?

Se você está usando um sistema como WordPress, Joomla ou Laravel, muitas vezes ele já usa Prepared Statements internamente. Mas se você está escrevendo código do zero, é sua responsabilidade garantir isso.

Se você tem dúvidas sobre seu código, o Sensei da GeHost está aqui para ajudar. Basta entrar em contato com nosso suporte — nós verificamos seu código com cuidado.

Importante: Mesmo com Prepared Statements, sempre valide e filtre os dados antes de usá-los. Segurança é uma camada, não uma única solução.

Resumo do que você aprendeu hoje

Com o poder dos Prepared Statements, você:

  • Evita que hackers explorem falhas no seu banco de dados.
  • Protege informações sensíveis dos seus usuários.
  • Escreve código mais limpo e seguro.
  • Se torna um(a) desenvolvedor(a) mais confiável e profissional.

Parabéns por estar aprendendo algo tão importante! Cada linha de código segura é um passo para um internet mais segura para todos.

Tela 'Bancos de Dados MySQL' no cPanel — onde você cria e gerencia bancos de dados

Se precisar criar um novo banco de dados para testar seus Prepared Statements, acesse o Bancos de Dados MySQL no cPanel — lá você pode criar um banco e um usuário com permissões seguras.

Até a próxima, e lembre-se: segurança começa com você.


Was this answer helpful?

« Back