Passo a Passo SQL Injection
SQL Injection (Injeção de SQL) é uma das falhas mais conhecidas e exploradas na segurança de aplicações web. Ela permite que um invasor interfira nas queries SQL executadas pelo sistema, podendo:
Obter informações confidenciais (usuários, senhas, emails, etc.);
Modificar, excluir ou inserir dados;
BURLAR autenticação (login);
Obter acesso total ao banco de dados;
Em alguns casos, até executar comandos no sistema operacional.
⚠️ Importante: SQL Injection não depende da linguagem (PHP, Python, JavaScript, etc.) nem da versão do banco.
A falha está na falta de validação e tratamento dos dados de entrada pelo desenvolvedor.
O usuário interage com a aplicação (por exemplo, preenchendo um formulário de login).
O back-end (código da aplicação) pega esses dados e monta uma query SQL.
A query é enviada ao banco de dados, que processa e responde.
Se não houver validação, o invasor pode injetar comandos SQL no meio dessa quer
Backend em Python (mas poderia ser PHP, JS, Java etc.)
Banco de dados MySQL
Tabela de login: users
Campos: username
e password
# Atenção: esse código tem falha proposital para estudo query = f"SELECT * FROM users WHERE username='{username}' AND password='{password}';" |
Se o usuário digitar:
username: admin' --
password: qualquercoisa
A query gerada será:
SELECT * FROM users WHERE username='admin' --' AND password='qualquercoisa'; |
O --
comenta o resto da query. O banco ignora a checagem da senha. Resultado: login sem senha.
Vamos imaginar um exemplo parecido:
O site tem um campo de login com username e password
O usuário digita:
Username: daniel
Password: admin
O back-end, por exemplo em Python, vai montar uma query assim:
Se houver uma falha de validação, o invasor pode injetar algo assim:
Username: admin' --
Password: (qualquer coisa)
O back-end vai interpretar:
O que acontece?
O comentário --
ignora o restante da query, burlando a senha.
Existem vários métodos e técnicas que um atacante pode usar. Vamos conhecer os principais:
' OR 1=1 -- |
Query resultante:
SELECT * FROM users WHERE username='' OR 1=1 --' AND password=''; |
1=1
é sempre verdadeiro → retorna todos os usuários.
Injeta diretamente na cláusula WHERE
, alterando a lógica da query:
O atacante não vê os dados diretamente, mas percebe mudanças no comportamento da aplicação (página muda ou não).
Teste:
' AND 1=1 -- |
Se a resposta for diferente de: