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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?
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!