Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Comparação

Como que apenas colocando uma afirmação verdadeira o banco de dados valida nossa entrada? O banco de dados não deveria funcionar apenas comparando o que escrevemos com a senha cadastrada?

3 respostas
solução

Oi André tudo bem?

O que é mostrado na aula é um código mal programado. Isso antigamente até o fim da década passada funcionava mais ou menos em algumas páginas.

Eu conheço dessa forma que muita gente fazia errado. É um pouco diferente do exemplo da aula mas serve para explicar.

O programador fez algo assim (em alguma linguagem qualquer):

usuario=inputDoUsuario.value;
senha=inputDaSenha.value;
conn=minhaConexao;
set rs as meusResultados;
sql="SELECT * FROM USUARIOS WHERE USUARIO='" + usuario +"' AND SENHA='" + senha +"'";
conn.open(rs,sql);

if (rs.eof==false){
    entrar();
}

Então se achou algo na tabela pode entrar no sistema porque existe um usuário e senha com aquele nome.

usuario="ANDRE";
senha="VICTOR";
sql="SELECT * FROM USUARIOS WHERE USUARIO='ANDRE' AND SENHA='VICTOR'";

O banco achava alguma coisa rs.eof (end of file) era false porque tinha um registro e o usuário entrava.

Mas tinha uns caras espertinhos que colocavam uma aspa simples dentro dos inputs . Então ficava

usuario="HACKER";
senha="DAPARADA' OR '1'='1";
sql="SELECT * FROM USUARIOS WHERE USUARIO='HACKER' AND SENHA='DAPARADA' OR '1'='1'";

e retornava todos os usuários da tabela e o cara entrava no site.

Hoje em dia só o pessoal do ASP Clássico e do PHP Clássico deixam essas brechas. Um jeito fácil de acabar com as aspas simples é dando replace nelas por nada.

usuario=inputDoUsuario.value.replace("'","");
senha=inputDaSenha.value.replace("'","");
conn=minhaConexao;
set rs as meusResultados;
sql="SELECT * FROM USUARIOS WHERE USUARIO='" + usuario +"' AND SENHA='" + senha +"'";
conn.open(rs,sql);

if (rs.eof==false){
    entrar();
}

As linguagens orientadas a objetos do backend usam frameworks bons que não fazem vc acessar o banco diretamente com SQL mas sim através da orientação a objetos usando métodos que são mais seguros.

Espero ter ajudado!!!

O problema está no modo como a chamada é feita ao banco de dados e que acaba permitindo essas brechas, correto?!

Exatamente!