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

Responder a