[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