Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FCC 2015

Banco de DadosSQL
Código
fc022267
Banca
FCC
Órgão
TCM-GO
Ano
2015
Nível
Superior
Cargo
Auditor de Controle Externo - Informática
Um Auditor de Controle Externo da área de TI do TCM/GO verificou que uma aplicação utiliza a seguinte chamada SQL: String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";Esta mesma aplicação utiliza um framework de persistência que faz a seguinte chamada em um formato SQL adaptado:Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");Esta aplicação está vulnerável a ataques de
  1. ACross-Site Scripting.
  2. BReferência Insegura e Direta a Objetos.
  3. CCross-Site Request Forgery.
  4. DSQL Injection.
  5. ESQL Annotation
Revelar gabarito e comentário

GabaritoD — SQL Injection.

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”.

SQL Injection

Gabarito: letra D. As duas chamadas (SQL nativo e HQL) concatenam diretamente o parâmetro recebido via request.getParameter("id") na string da consulta, sem qualquer sanitização ou uso de prepared statements. Isso permite que um atacante insira comandos SQL arbitrários, configurando um ataque clássico de SQL Injection.

A banca testa o conhecimento de vulnerabilidades web comuns. O código expõe a fragilidade ao montar a query por concatenação, que é o vetor principal de SQL Injection.

Alternativa A — ❌ Incorreta

Cross-Site Scripting (XSS) é uma injeção de scripts maliciosos no lado do cliente (navegador), geralmente via parâmetros que são refletidos na página HTML. Aqui o alvo é o banco de dados, não o navegador.

Alternativa B — ❌ Incorreta

Referência Insegura e Direta a Objetos (IDOR) ocorre quando um aplicativo expõe referências internas (como IDs) sem verificação de autorização, permitindo acesso não autorizado. Embora o parâmetro id seja usado, a vulnerabilidade descrita é de injeção, não de controle de acesso.

Alternativa C — ❌ Incorreta

Cross-Site Request Forgery (CSRF) explora a confiança do site no navegador do usuário, forjando requisições não intencionais. Não há manipulação da consulta ao banco, apenas requisições indesejadas.

Alternativa D — ✅ Correta ⟵ GABARITO

A concatenação direta de parâmetros na string SQL/HQL permite que um atacante encerre a consulta e execute comandos maliciosos, como ' OR '1'='1, comprometendo a integridade e confidencialidade dos dados. Esse é o cerne do SQL Injection.

Alternativa E — ❌ Incorreta

SQL Annotation não é um tipo de ataque conhecido. Pode ser uma confusão com anotações de frameworks (ex.: Hibernate annotations), mas não representa uma vulnerabilidade.

PEGA ESSA DICA!

Para prevenir SQL Injection, utilize prepared statements (parâmetros nomeados ou posicionais) ou consultas parametrizadas fornecidas pelo framework de persistência. No Hibernate, use createQuery("FROM accounts WHERE custID = :id").setParameter("id", valor);. Nunca concatene parâmetros diretamente na string da consulta.

Gabarito: letra D.

Link permanente: /questoes/fc022267