Obrigado pelas dicas sobre SQL injection. Minha senha está criptografada na base e no SGDB. Não é permitido o uso do apóstrofo no login. Somente letras e números. Mas, em conclusão sobre o tema do tópico. Só tem jeito se tratar a aplicação nesse caso, né?
Em 7 de agosto de 2012 08:54, Marcelo Silva <marc...@ig.com.br> escreveu: > Por isso deve-se evitar conferir a senha no SQL > > O melhor é assim > > Select * From Login Where (login = ‘”+var_login+”’) > > // Confere se pegou o login > if (Result > 0) > > Depois de Trazer o login faz um IF > > if (SuaQuery.SeuCampoSenha = VariavelSenha) > > Prossegue... > > Assim ele pode colocar a injeção que quiser no SELECT pois quem verifica a > senha é o IF > > Ou seja, verifique o login e senha separadamente > > * Por que o uso de “( )” ? > > Isso evita injeção sem formatação, por exemplo > a=b and c=d > > Se vc tiver um separador ele vai ter que formatar tamebm na injeção > > (a=b)and(c=d) > > Se ele colocar uma injeção em b ou d vai ficar > > (a=admin or 1=1; -- ')... > > Veja que vai falta fechar o ")" gerando um erro > > Claro que o cara vai tentar de tudo, mas vamos dificultar o máximo :) > > > Marcelo Silva > -------------------------------------- > > > > From: Matheus de Oliveira > Sent: Tuesday, August 07, 2012 8:32 AM > To: Comunidade PostgreSQL Brasileira > Subject: Re: [pgbr-geral] Tratamento de Contrabarra > > > 2012/8/6 Anselmo Silva <anselmo....@gmail.com> > > Matheus, obrigado. > A Linguagem: Delphi. Como eu disse anteriormente o usuário é quem digita a > contrabarra. > Como Alguns usuários já acabaram se acostumando em usar a barra como > "coringa", estou momentaneamente contornando > com uma função do Dephi ReplaceStr(where,'\', '%'). > > Não estou tratando contra SQL injection, preciso ler mais sobre. Para essa > gambiarra temporária haveria riscos de SQL injection? > > > > Nossa, agora que eu entendi que a barra é o coringa. Particularmente já vi > usar como coringa interrogação e asterisco, barra é a primeira vez... =P > > Mas então, o risco de SQL Injection não está na barra, está se o cara > digitar um apóstrofo (aspa simples). > Imagine só, se o cara digita isso aqui numa tela de login: > > login: admin' or 1 = 1; -- > senha: qualquer coisa > > Daí você faz a consulta +/- assim: > > sql = "SELECT * FROM login WHERE login = '" + login + "' AND senha = '" > + senha "'"; > > O SQL final ficaria: > > SELECT * FROM login WHERE login = 'admin' or 1 = 1; --' AND senha = > 'qualquer coisa'; > > Ou seja, o cara estaria logado como "admin" (veja que depois do "--" é > comentário). > > Se você tratar pelo menos a aspa simples, por exemplo trocando por duas > aspas, você estará livre de SQL Injection. Uma dica boa é usar PREPARED > STATEMENTS que já faz tudo isso pra você. > > Atenciosamente, > -- > Matheus de Oliveira > > > > _______________________________________________ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > _______________________________________________ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > -- Anselmo M. Silva
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral