Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-07 Por tôpico Matheus de Oliveira
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


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-07 Por tôpico Marcelo Silva
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 


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


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-07 Por tôpico Marcelo Silva
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


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-07 Por tôpico Anselmo Silva
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


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-07 Por tôpico Matheus de Oliveira
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


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-07 Por tôpico Marcelo Silva
Na verdade não se deve deixar o servidor exibir erros padrão para o usuário 
final, 
como você disse deve-se tratar o erro e exibir uma mensagem amigável ao usuário.
Acho que o uso do Try nesse caso poderia ser uma solução imediata.

no caso do delphi
try
  Verifica
  Deu erro para pro except
except
  Erro no login
end


Quanto a limitar o uso de caracteres no login e senha, eu já não gosto de 
colocar limitações para o usuário,
mas aí é questão de gosto (ou necessidade da empresa talvez),
nesses casos o que pesa pra mim é que o usuário leigo (que é o foco) vai ficar 
tentando digitar justamente aquele caractere que não pode, 
e vai vir correndo dizer que o sistema não funciona, rsrsrs

Tratar esse detalhes na aplicação é o que demanda tempo...


Marcelo Silva
-



From: Matheus de Oliveira 
Sent: Tuesday, August 07, 2012 9:21 AM
To: Comunidade PostgreSQL Brasileira 
Subject: Re: [pgbr-geral] Tratamento de Contrabarra




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
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-07 Por tôpico Alexsander Rosa
Ou então grave um md5(senha||pitada_de_sal) no banco e compare o digest ao
invés da senha.

Em 7 de agosto de 2012 09:20, Anselmo Silva anselmo@gmail.comescreveu:

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


-- 
Atenciosamente,
Alexsander da Rosa
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Tratamento de Contrabarra

2012-08-06 Por tôpico Anselmo Silva
Olá pessoal,
estou tendo um problema, que sei que é simples para vós, experientes com o
elefante.

Tenho vários campos de busca por texto em tempo real onde é possível o
usuário buscar algo como
o nome do produto. Isso é comum, porém se o usuário digita somente
uma contrabarra '\'  aí o bicho pega,
pois internamente meu select ficaria mais ou menos assim:

SELECT NOME FROM PROD WHERE NOME LIKE '\';

Resultado:

AVISO:  uso de \' fora do padrão em cadeia de caracteres
...
HINT:  Utilize '' para escrever cadeias de carateres entre apóstofros, ou
utilize a sintaxe de escape de cadeia de caracteres (E'...').

Andei lendo sobre a cláusula LIKE[1], especialmente sobre o ESCAPE, mas,
não entendi 100%.

Alguém podeia me dizer como contornar essa questão de newbie?

http://pgdocptbr.sourceforge.net/pg80/functions-matching.html

-- 
Anselmo M. Silva
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-06 Por tôpico Hallan Serafim Pagani
Tente  SELECT NOME FROM PROD WHERE NOME LIKE E'\';

Abraço.


Em 6 de agosto de 2012 11:44, Anselmo Silva anselmo@gmail.comescreveu:

 Olá pessoal,
 estou tendo um problema, que sei que é simples para vós, experientes com o
 elefante.

 Tenho vários campos de busca por texto em tempo real onde é possível o
 usuário buscar algo como
 o nome do produto. Isso é comum, porém se o usuário digita somente
 uma contrabarra '\'  aí o bicho pega,
 pois internamente meu select ficaria mais ou menos assim:

 SELECT NOME FROM PROD WHERE NOME LIKE '\';

 Resultado:

 AVISO:  uso de \' fora do padrão em cadeia de caracteres
 ...
 HINT:  Utilize '' para escrever cadeias de carateres entre apóstofros, ou
 utilize a sintaxe de escape de cadeia de caracteres (E'...').

 Andei lendo sobre a cláusula LIKE[1], especialmente sobre o ESCAPE, mas,
 não entendi 100%.

 Alguém podeia me dizer como contornar essa questão de newbie?

 http://pgdocptbr.sourceforge.net/pg80/functions-matching.html

 --
 Anselmo M. Silva

 ___
 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


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-06 Por tôpico Matheus de Oliveira
2012/8/6 Hallan Serafim Pagani hallan.mar...@gmail.com

 Tente  SELECT NOME FROM PROD WHERE NOME LIKE E'\';


Não seria duas barras?

SELECT NOME FROM PROD WHERE NOME LIKE E'\\';


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


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-06 Por tôpico Luiz Rafael Culik
Ola

Se não me engano seria duas barra no modo antigo

[]s
Luiz

Em 6 de agosto de 2012 13:37, Matheus de Oliveira matioli.math...@gmail.com
 escreveu:


 2012/8/6 Hallan Serafim Pagani hallan.mar...@gmail.com

 Tente  SELECT NOME FROM PROD WHERE NOME LIKE E'\';


 Não seria duas barras?

 SELECT NOME FROM PROD WHERE NOME LIKE E'\\';


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


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-06 Por tôpico Anselmo Silva
Detalhe : Postgres 8.0.8

Em 6 de agosto de 2012 13:56, Luiz Rafael Culik l...@xharbour.com.brescreveu:

 Ola

 Se não me engano seria duas barra no modo antigo

 []s
 Luiz

 Em 6 de agosto de 2012 13:37, Matheus de Oliveira 
 matioli.math...@gmail.com escreveu:


 2012/8/6 Hallan Serafim Pagani hallan.mar...@gmail.com

 Tente  SELECT NOME FROM PROD WHERE NOME LIKE E'\';


 Não seria duas barras?

 SELECT NOME FROM PROD WHERE NOME LIKE E'\\';


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


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-06 Por tôpico Anselmo Silva
Ops! Postgres 9.0.8

2012/8/6 Anselmo Silva anselmo@gmail.com

 Detalhe : Postgres 8.0.8

 Em 6 de agosto de 2012 13:56, Luiz Rafael Culik 
 l...@xharbour.com.brescreveu:

 Ola

 Se não me engano seria duas barra no modo antigo

 []s
 Luiz

 Em 6 de agosto de 2012 13:37, Matheus de Oliveira 
 matioli.math...@gmail.com escreveu:


 2012/8/6 Hallan Serafim Pagani hallan.mar...@gmail.com

 Tente  SELECT NOME FROM PROD WHERE NOME LIKE E'\';


 Não seria duas barras?

 SELECT NOME FROM PROD WHERE NOME LIKE E'\\';


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




-- 
Anselmo M. Silva
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-06 Por tôpico Flavio Henrique Araque Gurgel
Em 06-08-2012 14:17, Anselmo Silva escreveu:
 Detalhe : Postgres 8.0.8

Por que tanta gente aqui nesta lista gosta de viver na fronteira entre a 
vida e a morte?
8.0.8 não é suportada já faz 4 anos!!!
Sem contar que a última versão estável dela foi 8.0.26!!!
Ou seja, a versão que você está usando tinha bug *conhecidos* há uns 7 
ou 8 anos atrás!

Risco, risco, risco, risco, risco desnecessário.

[]s

Flavio Henrique A. Gurgel
Consultor e Instrutor 4Linux
Tel: +55-11-2125-4747
www.4linux.com.br
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-06 Por tôpico Flavio Henrique Araque Gurgel

Em 06-08-2012 14:24, Anselmo Silva escreveu:
 Ops! Postgres 9.0.8

Ooops, então ignore meu e-mail anterior.
Nossa, que susto.

Flavio Henrique A. Gurgel
Consultor e Instrutor 4Linux
Tel: +55-11-2125-4747
www.4linux.com.br
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-06 Por tôpico Euler Taveira
On 06-08-2012 14:17, Anselmo Silva wrote:
 Detalhe : Postgres 8.0.8
 
[evite top-posting...] Considere atualizar pois esta versão já foi
descontinuada a quase dois anos.

Quanto a sua dúvida, contrabarra (\) é o caracter de escape do LIKE então para
utilizá-lo você deve fazer escape nele:

euler=# select * from prod where a LIKE '%\\%';
  a
--
 tes \\ teste
 tes \ teste
(2 registros)

ou utilizar um caracter de escape diferente utilizando a cláusula ESCAPE:

euler=# select * from prod where a LIKE '%\%' ESCAPE '';
  a
--
 tes \\ teste
 tes \ teste
(2 registros)


-- 
   Euler Taveira de Oliveira - Timbira   http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-06 Por tôpico Anselmo Silva
Euler, desculpe-me pelo top-posting, não tive a intenção.
Já está nos planos a atualização, mas, por hora, tem um problema ao aplicar
sua sugestão. talvez por inexperiência minha.

Na aplicação o campo de busca oferece ao usuário uma opção de buscar:
(1)*Pelo Início do termo* - Assim faço: (SELECT NOME FROM PROD WHERE NOME
LIKE '\%');
(2)*Em qualquer parte do termo* - Assim faço: (SELECT NOME FROM PROD WHERE
NOME LIKE '%\%');
(3)*Pelo Fim do termo* - Assim faço: (SELECT NOME FROM PROD WHERE NOME LIKE
'%\'); AVISO:  uso de \' fora do padrão em cadeia de caracteres
(4)S*omente o Termo* - Assim faço: (SELECT NOME FROM PROD WHERE NOME LIKE
'\');AVISO:  uso de \' fora do padrão em cadeia de caracteres



Em 6 de agosto de 2012 14:35, Euler Taveira eu...@timbira.com escreveu:

 On 06-08-2012 14:17, Anselmo Silva wrote:
  Detalhe : Postgres 8.0.8
 
 [evite top-posting...] Considere atualizar pois esta versão já foi
 descontinuada a quase dois anos.

 Quanto a sua dúvida, contrabarra (\) é o caracter de escape do LIKE então
 para
 utilizá-lo você deve fazer escape nele:

 euler=# select * from prod where a LIKE '%\\%';
   a
 --
  tes \\ teste
  tes \ teste
 (2 registros)

 ou utilizar um caracter de escape diferente utilizando a cláusula ESCAPE:

 euler=# select * from prod where a LIKE '%\%' ESCAPE '';
   a
 --
  tes \\ teste
  tes \ teste
 (2 registros)


 --
Euler Taveira de Oliveira - Timbira   http://www.timbira.com.br/
PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
 ___
 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


Re: [pgbr-geral] Tratamento de Contrabarra

2012-08-06 Por tôpico Matheus de Oliveira
2012/8/6 Anselmo Silva anselmo@gmail.com

 Euler, desculpe-me pelo top-posting, não tive a intenção.
 Já está nos planos a atualização, mas, por hora, tem um problema ao
 aplicar sua sugestão. talvez por inexperiência minha.

 Na aplicação o campo de busca oferece ao usuário uma opção de buscar:
 (1)*Pelo Início do termo* - Assim faço: (SELECT NOME FROM PROD WHERE NOME
 LIKE '\%');
 (2)*Em qualquer parte do termo* - Assim faço: (SELECT NOME FROM PROD
 WHERE NOME LIKE '%\%');
 (3)*Pelo Fim do termo* - Assim faço: (SELECT NOME FROM PROD WHERE NOME
 LIKE '%\'); AVISO:  uso de \' fora do padrão em cadeia de caracteres
 (4)S*omente o Termo* - Assim faço: (SELECT NOME FROM PROD WHERE NOME LIKE
 '\');AVISO:  uso de \' fora do padrão em cadeia de caracteres

 Use duas barras ao invés de uma, como já foi dito.

Qual linguagem você usa? Algumas têm funções próprias pra dar um escape
na string automaticamente (ou você pode usar um replace básico, tipo str =
replace(str, \, \\)). Se você não está tratando isso, então está
sujeito à SQL Injection.

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