2012/8/7 Marcelo Silva <marc...@ig.com.br>

> 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 :)
>
>
Não é a questão de testar a senha ou não via SQL, o que eu também não
gosto, mas mesmo da forma que você passou um erro será gerado, e, se esse
erro não for tratado corretamente o cara poderá ver esse erro e identificar
a correção, daí é só o cara adicionar o parentese também.

O ideal é tratar a string e evitar o erro.

--
Matheus de Oliveira
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a