Pular para o conteúdo
Todos os conceitos

Injeção de SQL

Quando o site mistura o que você digita com o comando do banco, o texto vira comando.

Sites guardam dados num banco de dados e perguntam a ele usando uma linguagem chamada SQL. Um login, por exemplo, pergunta se existe alguém com aquele usuário e senha:

SELECT * FROM usuarios WHERE usuario = 'joao' AND senha = '1234'

O perigo aparece quando o site monta esse comando colando o que você digita, sem separar os dados do comando. Se você digitar uma aspa simples (') no campo de usuário, ela fecha o texto cedo, e o resto do que você escrever passa a fazer parte do comando.

Digitando ' OR '1'='1' -- no usuário, o comando vira:

SELECT * FROM usuarios WHERE usuario = '' OR '1'='1' -- ' AND senha = '...'

A aspa fecha o nome vazio, OR '1'='1' é sempre verdadeiro, e -- transforma o resto da linha em comentário, apagando a checagem da senha. O banco devolve um usuário e o login é aceito, sem senha nenhuma.

Isso é injeção de SQL. A correção é sempre a mesma: usar consultas parametrizadas, em que o valor digitado é entregue ao banco como dado puro e nunca pode virar comando.

Aparece nestes desafios