Pular para o conteúdo principal

Questão de Segurança da Informação — OWASP — CESPE / CEBRASPE 2025

Segurança da InformaçãoOWASP
Código
ce418207
Banca
CESPE / CEBRASPE
Órgão
PF
Ano
2025
Cargo
PCF
Certa aplicação web tem uma funcionalidade de busca de usuários por nome, realizada em PHP, conforme os parâmetros a seguir. $ username = $ _GET['username']; $ query = “SELECT * FROM users WHERE username = '$ username'“; $ result = mysqli_query($ connection, $ query); A partir dessas informações, julgue o item subsequente, considerando o que é definido pelo OWASP Top 10 de 2021 no que diz respeito a falhas de aplicação.   Considere que um atacante tenha acesso à aplicação em apreço e realize a seguinte chamada. http://prova.com/busca?username=admin'-- Nesse caso, essa chamada equivale à consulta SQL a seguir. SELECT * FROM users WHERE username = 'admin'- -'
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Injeção SQL: análise da chamada 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.

NÃO CAIA NESSA!

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.

  1. 1Entrada: admin'--
  2. 2Interpolação na query
  3. 3-- comenta o resto
  4. 4Consulta executada: admin
LEVEL · soulevel.com.br

Item — ✅ CERTO ⟵ GABARITO

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