Problemas con PostgreSQL
Esteban Manchado Velázquez
zoso en demiurgo.org
Mie Feb 11 19:53:43 CET 2004
On Wed, Feb 11, 2004 at 07:19:00PM +0100, luis miguel morillas wrote:
> [...]
> > > Fíjese Vd. Esta sintaxis no la conocía. Gracias, setepo :)
> >
> > ¿No dicen los Pythonianos que sólo tiene que haber una manera de hacer
> > las cosas? Jajajajaja... ¡es broma, es broma!
> Las intenciones son buenas, pero en este punto concreto la misma DBApi define
> cinco formas distintas de paso de parámetros (paramstyle) ;-)
:-)
> > Por cierto, una pregunta inocente (sin mala leche, sólo curiosidad, porque
> > no conozco bien DB-API): ¿el programador tiene que «escapar» los caracteres
> > malos de la pradera antes de construir las consultas? ¿hay alguna manera de
> > automatizar esas sustituciones? ¿cómo lo hacen los expertos en Python
> > normalmente?
>
> No te entiendo muy bien, explícamelo un poco más.
Lo que quiero decir es que si un fulano escribe en un formulario de entrada
a una aplicación (en el campo nombre, p.ej.) algo como:
'; DELETE from usuarios; SELECT * from usuarios WHERE 'a' = 'a
y la consulta para comprobar si el usuario y la clave son correctos es así:
SELECT count(*) from usuarios WHERE usuario = '$usuario' AND
clave = '$clave'
Ejecutaríamos en la base de datos esto:
SELECT count(*) from usuarios WHERE usuario = ''; DELETE from usuarios; SELECT * from usuarios WHERE 'a' = 'a' AND clave = '$clave'
O sea, el ataque conocido como «inyección de SQL». Lo que quería saber es si
hay alguna manera en DB-API de que se escapen los caracteres peligrosos
automáticamente, porque el ejemplo que ponían era (entiendo) una sustitución
directa, que sería vulnerable a la inyección SQL a no ser que nosotros, a
mano, fuéramos argumento por argumento escapando los caracteres peligrosos
antes de sustituir en la consulta...
Saludos,
--
Esteban Manchado Velázquez <zoso*demiurgo*org> - http://www.demiurgo.org
No software patents in Europe! - eurolinux.org - proinnova.hispalinux.es
Join Amnesty International - http://www.amnesty.org/actnow
Más información sobre la lista de distribución Python-es