Questão nº 73

Questão de Administração de Banco de Dados · FGV MPAL 2018 (nº 73)

FGV2018Analista do Ministério Público - Administrador de Banco de DadosAdministração de Banco de Dados
Gabarito: Bver comentário ↓

Considere que o comando a seguir, seja executado em um aplicativo Web, após a requisição dos dados usuário/senha.

```
sql = "SELECT FROM PESSOA
WHERE Nome ='" + txtNome + "'"
AND Senha ='" + txtPwd + "'"
```

Assinale os textos digitados maldosamente, armazenados respectivamente nas variáveis
txtNome e txtPwd*, que caracterizariam uma invasão do tipo "SQL Injection".

Resposta comentada

Gabarito Alternativa B

SQL Injection é uma técnica maliciosa onde um atacante insere código SQL (Structured Query Language) em campos de entrada de um aplicativo para manipular as consultas do banco de dados, muitas vezes para contornar a autenticação ou extrair dados confidenciais.

  • (A) Incorreta: A entrada ' and '1=1' resultaria em Nome ='' and '1=1'', que é uma sintaxe SQL inválida devido às aspas simples desbalanceadas, causando um erro no banco de dados em vez de um bypass.
  • (B) Correta: Se txtNome = ' or ''=' e txtPwd = ' or ''=', a consulta se torna SELECT * FROM PESSOA WHERE Nome ='' or ''='' AND Senha ='' or ''=''. A primeira aspa simples em txtNome fecha a string do Nome, e or ''='' (que é OR TRUE) torna a condição Nome sempre verdadeira. O mesmo ocorre para Senha. Assim, a cláusula WHERE se torna (TRUE) AND (TRUE), resultando em TRUE, e a consulta retorna todos os usuários, bypassando a autenticação.
  • (C) Incorreta: A entrada or '='' (sem a aspa inicial) faria com que a string or ''=' fosse tratada como parte literal do nome/senha, ou seja, Nome ='or ''='''. Isso não injeta código SQL, apenas compara com uma string específica.
  • (D) Incorreta: Similar à alternativa C, a entrada or '1=1' (sem a aspa inicial) seria tratada como parte literal da string, resultando em Nome ='or '1=1''. Não há injeção de SQL.
  • (E) Incorreta: A entrada ' and ''='' resultaria em Nome ='' and ''=''''. Isso se traduz em Nome ='' AND TRUE, que simplifica para Nome =''. Para que a autenticação fosse bem-sucedida, tanto Nome quanto Senha teriam que ser strings vazias, o que não é um bypass geral. A armadilha aqui é que, embora ''='' seja TRUE, a condição AND faz com que a cláusula WHERE se torne Nome ='' AND Senha ='', que é uma condição específica e não um bypass incondicional.

Fonte: FGV MPAL 2018 Analista do Ministério Público - Administrador de Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho