Considere que o comando a seguir, seja executado em um apli...

Próximas questões
Com base no mesmo assunto
Q914462 Banco de Dados
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”.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a letra B.

Vamos entender o motivo. A questão aborda o tema de SQL Injection, que é uma técnica de ataque em que um invasor insere ou "injeta" uma sequência de código SQL malicioso em uma consulta, com o objetivo de manipular ou explorar a base de dados.

Para resolver a questão, você precisa ter conhecimento sobre como funciona uma injeção de SQL e como ela pode ser utilizada para obter acesso não autorizado ou manipular dados. O comando SQL fornecido na questão é:

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

Observe que os valores txtNome e txtPwd são diretamente concatenados na string SQL sem qualquer validação ou sanitização. Isso torna a aplicação vulnerável a ataques de SQL Injection.

Vamos analisar as alternativas:

A - ' and '1=1'
' and '1=1'

Essa alternativa tenta usar a operação lógica AND, mas a lógica completa não se encaixa bem para bypassar a autenticação, pois ainda depende da veracidade das condições "Nome" e "Senha".

B - ' or ''=''
' or ''=''

Essa é a alternativa correta. Vamos ver como isso funcionaria na consulta:

sql = "SELECT * FROM PESSOA
       WHERE Nome ='' or ''=''
         AND Senha ='' or ''='' "

Com isso, a consulta sempre retornaria verdadeiro devido ao ''='' , permitindo que o invasor passe pela autenticação sem fornecer um nome de usuário e senha válidos.

C - or ' =''
or ''=''

Essa alternativa é semelhante à B, mas a falta de aspas no início pode causar um erro de sintaxe SQL dependendo do banco de dados.

D - or '1=1'
or '1=1'

Embora também seja uma tentativa de SQL Injection, a ausência de aspas no início de "or" pode gerar erro de sintaxe, fazendo com que a consulta não seja executada corretamente.

E - ' and ''=''
' and ''=''

Similar à alternativa A, usa a operação AND de forma que ainda depende da veracidade das condições "Nome" e "Senha", logo não é eficaz para bypassar a autenticação.

Resumo: A alternativa B é a correta porque usa uma lógica que pode sempre ser verdadeira (''=''), o que compromete a segurança, permitindo que o invasor ultrapasse a autenticação sem credenciais válidas.

Para proteger-se contra esse tipo de ataque, recomenda-se o uso de consultas preparadas (prepared statements) e a sanitização de entradas do usuário.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

GAB (B).

Substituindo os valos na sql:

SELECT * FROM PESSOA WHERE Nome = '' or '' = '' AND Senha = '' or '' = ''

.

A consulta irá comparar strings vazias, tornando a condição verdadeira

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo