ANÚNCIO

~/questoes/ciberseguranca

Qual técnica previne SQL Injection de forma eficaz?

Responda, confira o feedback e use o resultado para orientar sua revisão.
Para fixar

Prepared Statements: A Defesa Contra SQL Injection

Conceito central

Prepared statements são uma técnica de programação que separa o código SQL dos dados fornecidos pelo usuário, impedindo que entrada maliciosa seja interpretada como comando. Essa separação é a forma mais eficaz de neutralizar ataques de SQL injection, uma das vulnerabilidades mais comuns do OWASP Top 10.

Por que essa resposta faz sentido

Prepared statements funcionam enviando a estrutura da consulta SQL antes dos dados. O banco de dados já sabe exatamente qual é o comando e qual é o dado, tornando impossível um atacante injetar código SQL através de caracteres especiais ou comandos disfarçados.

Armadilhas comuns

  • Confundir validação de entrada (remover caracteres) com prevenção de SQL injection — validação sozinha não é suficiente e pode ser contornada.
  • Pensar que criptografia ou autenticação protegem contra injeção — essas técnicas protegem contra problemas diferentes e não impedem que comandos SQL maliciosos sejam executados.
  • Acreditar que concatenar strings com variáveis depois de 'limpar' a entrada é seguro — prepared statements são sempre mais confiáveis que qualquer tentativa manual de sanitização.

Entenda as alternativas

A

Autenticação multi-fator protege contra acesso não autorizado a contas, mas não previne SQL injection. Um usuário autenticado ainda poderia explorar vulnerabilidades de injeção se a aplicação não tiver defesas adequadas.

B

Criptografia de senhas com AES-256 é importante para proteção de dados em repouso, mas não está relacionada à prevenção de SQL injection. Um atacante poderia explorar a injeção sem nem precisar acessar senhas.

C

Remover caracteres especiais é uma tentativa de validação fraca e facilmente contornável. Um atacante pode explorar SQL injection usando apenas caracteres alfanuméricos, e essa abordagem não é robusta como prepared statements.

D

Usar prepared statements com parâmetros separados é o padrão ouro de segurança contra SQL injection. O banco de dados trata dados como dados, nunca como comando, eliminando completamente esse vetor de ataque.

Dica prática: Na prática, use sempre a biblioteca ou framework nativa do seu ambiente de programação para prepared statements. Em JavaScript com SQL, use consultas parametrizadas; em Python, use placeholders com sqlalchemy ou psycopg2; em PHP, use MySQLi ou PDO. Nunca construa consultas SQL concatenando strings, mesmo que pareça mais fácil.

Revise pensando: Por que prepared statements separam o código SQL dos dados, e por que isso torna a SQL injection impossível?