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?
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!