[Cascavel-pm] Existe maneira de fazer um auto escape de aspas em cgi perl

Solli Moreira Honorio shonorio em terra.com.br
Terça Fevereiro 14 03:53:13 PST 2006


> A substibuicao por :
> 
>   $sth = $dbh->prepare("INSERT INTO table ( id, valor ) VALUES ( ?, ? )");
>   $sth->execute($Id, $Valor);
> 
> resolve o problema ... mas tem de ser feito em varios locais ...
> 
Este cara tem outras vantagens, uma é que se você pode ganhar velocidade na inserção em massa, e no  select,
pois ele 'compila' (verifica sintaxes)  o comando e depois só executa o commando com os dados.

A outra vantagem é que reduz o risco de sql injection, pois ele considerará a entrada como uma string completa,
e não cai nos truques simples desta técnica. Digamos você está num formulário que recebe um email como chave de
usuário, o cara pode enviar um 'condicional' para sempre ter valor = 1 do teu  select, como no exemplo abaixo.

SELECT fieldlist
  FROM table
 WHERE field = 'anything' OR 'x'='x';  -- aqui é um select com um 'or' que sempre é verdadeiro

... neste caso, ele vai fazer algo como : 

SELECT fieldlist
  FROM table
 WHERE field = q{'anything' OR 'x'='x'}; -- isto aqui é uma string completa, que retornará falso

Por este motivo sempre utilizo o prepare, vai por mim, vale a pena.... você não perde nada, mas pode ganhar
muito....

Solli M. Honório



Mais detalhes sobre a lista de discussão Cascavel-pm