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

Responder a