SQL injection
When input becomes a command
- Many apps build a database query by gluing the user's input into a string. That is dangerous.
- If an attacker types SQL as their input, it can become part of the query. This is SQL injection — the most famous web attack.
Quando a entrada se torna um comando
- Muitos aplicativos constroem uma consulta de banco de dados colando a entrada do usuário em uma string. Isso é perigoso.
- Se um atacante digitar SQL como sua entrada, ela pode fazer parte da consulta. Isso é injeção de SQL — o ataque web mais famoso.
See the attack
- Imagine a login that checks
... WHERE name = '<whatever you typed>'. - An attacker types
' OR '1'='1as the name. The query becomes:
'1'='1'is always true, so the database returns every user. The login is bypassed. Run it and see.
Ver o ataque
- Imagine um login que verifica
... WHERE name = '<whatever you typed>'. - Um atacante digita
' OR '1'='1como nome. A consulta torna-se:
SELECT * FROM users WHERE name = '' OR '1'='1';
'1'='1'é sempre verdadeiro, então o banco de dados retorna todos os usuários. O login é contornado. Execute e veja.
The fix: parameterised queries
- Never glue user input into SQL. Use parameterised queries (also called prepared statements).
- The database treats the input strictly as a value, never as code — so
' OR '1'='1is just a (failed) name to look up. - Also apply least privilege: the web app's database account should only do what it needs.
A correção: consultas parametrizadas
- Nunca cole entrada do usuário no SQL. Use consultas parametrizadas (também chamadas de declarações preparadas).
- O banco de dados trata a entrada estritamente como um valor, nunca como código — então
' OR '1'='1é apenas um nome (inválido) para buscar. - Aplique também o princípio do menor privilégio: a conta de banco de dados do aplicativo web deve fazer apenas o que for necessário.
Your turn
- Below, write a precise, safe query that returns only bob by his
id. That is the spirit of a parameterised lookup.
Covers: A-Level data security; web application security.
Sua vez
- Abaixo, escreva uma consulta precisa e segura que retorne apenas bob pelo seu
id. Esse é o espírito de uma busca parametrizada.
Cobertura: Segurança de dados A-Level; segurança de aplicações web.
Common mistakes
- Never build a query by joining raw user input into the text.
- Use parameterised queries so input can never change the query.
Erros comuns
- Nunca construa uma consulta unindo entrada bruta do usuário ao texto.
- Use consultas parametrizadas para que a entrada nunca possa alterar a consulta.
First, run the attack and see the damage. The app glued the attacker's input into the query, so the condition became name = '' OR '1'='1'. Complete the query exactly like that and see every user leak out. · Primeiro, execute o ataque e veja o dano. O app colou a entrada do atacante na consulta, então a condição tornou-se name = '' OR '1'='1'. Complete a consulta exatamente assim e veja todo usuário vazado.
Click Run to see the output here. · Clique em Executar para ver a saída aqui.
A safe lookup uses a precise condition. Change the query to return only bob's row, by adding WHERE id = 2. · Uma busca segura usa uma condição precisa. Mude a consulta para retornar apenas a linha do bob, adicionando WHERE id = 2.
Click Run to see the output here. · Clique em Executar para ver a saída aqui.