Considere a situação em que um usuário é solicitado a inserir o nome de uma cidade através de um formulário em uma aplicação web. Se ele inserir a cidade 'Curitiba', a consulta SQL criada pelo script será:SELECT * FROM EleicoesTable WHERE City = 'Curitiba'No entanto, suponha que o usuário insira o seguinte:'Curitiba'; drop table EleicoesTable--Nesse caso, a seguinte consulta SQL é gerada pelo script:SELECT * FROM EleicoesTable WHERE City = 'Curitiba';drop table EleicoesTable--Considerando que o ponto-e-vírgula (;) denota o término de uma consulta e o início de outra e que o hífen duplo (--) indica que o restante da linha atual é um comentário e deve ser ignorado, é correto afirmar:
AComo o código injetado está sintaticamente incorreto, não será executado pelo servidor de banco de dados.
BMesmo que o código SQL injetado esteja sintaticamente correto, a violação será detectada programaticamente.
CÉ responsabilidade do servidor de banco de dados validar todas as entradas de usuário e verificar o código que executa comandos SQL.
DQuando essa instrução for executada, o Banco de Dados selecionará primeiro todos os registros em EleicoesTable onde City é Curitiba e, em seguida, descartará EleicoesTable.
EEste é um exemplo de como uma aplicação web pode dar liberdade ao usuário de atualizar dados em uma base de dados, mas somente os programadores, que conhecem os nomes e campos das tabelas, conseguem fazer isso.
Revelar gabarito e comentário▾
GabaritoD — Quando essa instrução for executada, o Banco de Dados selecionará primeiro todos os registros em EleicoesTable onde City é Curitiba e, em seguida, descartará EleicoesTable.
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. A injeção de SQL apresentada é sintaticamente correta: o ponto-e-vírgula finaliza a primeira consulta (SELECT) e inicia a segunda (DROP TABLE), sendo que o hífen duplo comenta o restante (a aspa simples final que sobraria). Portanto, ambas as instruções serão executadas pelo servidor — primeiro a seleção, depois a exclusão da tabela.
1Entrada maliciosaUsuário insere 'Curitiba'; drop table EleicoesTable--
2Consulta montadaSELECT ... WHERE City = 'Curitiba'; drop table EleicoesTable--
3SELECT executadoRetorna registros de City = Curitiba
4DROP executadoTabela EleicoesTable é excluída
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
O código injetado está sintaticamente correto. A string '; drop table EleicoesTable-- forma duas instruções SQL válidas: a primeira finaliza o SELECT com a condição City = 'Curitiba' e a segunda é um comando DROP perfeitamente aceito pelo banco de dados.
Alternativa B — ❌ Incorreta
Não há detecção programática automática no cenário descrito. A aplicação monta a consulta diretamente com a entrada do usuário, sem qualquer validação ou sanitização. Se o código for sintaticamente correto, o servidor o executará sem rejeitá-lo.
Alternativa C — ❌ Incorreta
A responsabilidade de validar entradas de usuário é da aplicação web, não do servidor de banco de dados. O servidor apenas executa as instruções SQL que recebe; cabe ao desenvolvedor do sistema evitar a injeção por meio de técnicas como prepared statements ou escape de caracteres.
Alternativa D — ✅ Correta ⟵ GABARITO
Exatamente o que ocorre: o primeiro comando SELECT * FROM EleicoesTable WHERE City = 'Curitiba'; é executado e retorna os registros; em seguida, o comando drop table EleicoesTable-- é executado, destruindo a tabela. O -- faz com que o restante da linha (a aspa simples final) seja ignorado como comentário, evitando erro de sintaxe.
Alternativa E — ❌ Incorreta
O exemplo ilustra justamente o oposto: um atacante pode injetar comandos SQL maliciosos sem conhecer previamente os nomes das tabelas (neste caso, o nome EleicoesTable foi obtido por tentativa ou por vazamento anterior). A vulnerabilidade permite a qualquer usuário, e não apenas programadores, executar comandos arbitrários.