Considere que o comando a seguir, seja executado em um apli...
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”.
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