Questão de Segurança da Informação — OWASP — CESPE / CEBRASPE 2025
- Código
- ce418207
- Banca
- CESPE / CEBRASPE
- Órgão
- PF
- Ano
- 2025
- Cargo
- PCF
- CCerto
- EErrado
GabaritoC — Certo
admin'--✅ CERTO. A chamada http://prova.com/busca?username=admin'-- equivale exatamente à consulta SELECT * FROM users WHERE username = 'admin'--'. O atacante fecha a string com a aspa simples, e a sequência -- inicia um comentário no SQL, fazendo com que o restante da consulta (a aspa final e o que viesse depois) seja ignorado pelo banco de dados. Isso é um ataque clássico de SQL Injection, classificado no OWASP Top 10 de 2021 como A03:2021 – Injeção (Injection).
A vulnerabilidade está no código PHP que concatena diretamente o parâmetro $_GET['username'] na string da consulta SQL, sem qualquer validação, sanitização ou uso de consultas parametrizadas (prepared statements). O OWASP Top 10 de 2021 define a categoria A03 – Injeção como aquela em que "a aplicação é vulnerável pois não valida os dados fornecidos pelo usuário, permite consultas dinâmicas ou dados hostis em parâmetros de pesquisa". É exatamente o caso: o valor do usuário é inserido cru na query.
Para entender o ataque, é preciso decompor a chamada. O parâmetro username recebe o valor admin'--. Ao ser interpolado na consulta, o resultado é:
SELECT * FROM users WHERE username = 'admin'--'A leitura correta é: a string começa com 'admin' (a aspa simples abre a string, admin é o conteúdo, e a aspa simples seguinte a fecha). Em seguida, -- é o operador de comentário de linha no MySQL (e em muitos outros SGBDs). Tudo o que vier depois de -- é ignorado até o fim da linha. Portanto, a aspa simples final que estava no código original ('$username') é "comentada" e não causa erro de sintaxe. A consulta efetivamente executada é:
SELECT * FROM users WHERE username = 'admin'O atacante, ao invés de precisar saber a senha, consegue autenticar como o usuário admin (se ele existir) simplesmente comentando o restante da cláusula WHERE. Esse é o princípio do ataque de SQL Injection: manipular a entrada para alterar a estrutura da consulta SQL.
A pegadinha desta questão está na representação da consulta resultante. O enunciado mostra SELECT * FROM users WHERE username = 'admin'- -' (com um espaço entre os dois hífens). Isso é apenas uma forma de representar o comentário -- no texto da questão, pois em alguns contextos de formatação o -- poderia ser interpretado como um travessão. O importante é que a sequência -- (com ou sem espaço) é o que inicia o comentário no SQL. A consulta resultante é funcionalmente idêntica à apresentada.
A banca pode tentar confundir o candidato de duas formas. Primeiro, ao apresentar o comentário como - - (com espaço), o que pode parecer um erro de digitação, mas é apenas a representação do -- no texto. Segundo, ao sugerir que a consulta resultante teria um erro de sintaxe por causa da aspa final não fechada. O candidato que não conhece o operador de comentário -- do SQL pode achar que a consulta está quebrada e marcar "Errado". Na verdade, o -- comenta a aspa final, tornando a consulta válida e funcional.
A afirmação está correta. A chamada http://prova.com/busca?username=admin'-- equivale à consulta SELECT * FROM users WHERE username = 'admin'--'. O -- é o operador de comentário de linha no MySQL, e tudo o que vem depois dele é ignorado. Assim, a aspa simples final do código original é comentada, e a consulta executada é SELECT * FROM users WHERE username = 'admin'. Isso caracteriza uma vulnerabilidade de SQL Injection, enquadrada no OWASP Top 10 de 2021 como A03 – Injeção.
Gabarito: letra C (Certo).
Link permanente: /questoes/ce418207