[Cascavel-pm] Como NÃO montar SQL, #1: interpolação de variáveis [Was: Duvida $dbh->prepare]

Luis Motta Campos luismottacampos em yahoo.co.uk
Quinta Janeiro 25 08:09:58 PST 2007


On Jan 25, 2007, at 4:49 PM, Igor Sutton wrote:
> Os placeholders fazem teste de sanidade para  evitar que você coloque
> um código SQL malicioso (acredito que o Luis possa dar mais exemplos
> disso).

   Sacanagem... aqui tem um legal:

   Ao invés de um parâmetro, um neguinho mal-intencionado pode  
introduzir alguma coisa assim no seu código (para Oracle, desculpem o  
mau-jeito):

   DROP TABLE
   (   SELECT table_name
       FROM all_tables
       WHERE 1 LIKE 'A%'
       LIMIT 1
   )

   e o seu SQL bonitinho, que era assim:

   SELECT nome, endereco, telefone
   FROM address_book
   WHERE nome = ?
   ORDER BY nome

   vai terminar cabeludo assim:

   SELECT nome, endereco, telefone
   FROM address_book
   WHERE nome = DROP TABLE
                (   SELECT table_name
                    FROM all_tables
                    WHERE 1 LIKE 'A%'
                    LIMIT 1
                )
   ORDER BY nome

   Claro, isso SE os placeholders não fossem espertos e não fizessem  
testes de sanidade.

   Agora, se você é um azarado preguiçoso, que, ao invés de aprender  
a usar placeholders, preferiu "montar" seus queries com interpolação  
de string... se prepara, que um dia um fil#!-da-@#!$ vai descobrir a  
sua base de dados na internet... ;-)

   Putamplexos!
--
Luis Motta Campos is software engineer,
perl fanatic evangelist, and amateur {cook, photographer}




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