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
ACross-Site Scripting.
BReferência Insegura e Direta a Objetos.
CCross-Site Request Forgery.
DSQL Injection.
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.