OT Inyección en sentencias SQL

Oswaldo Hernández listas en soft-com.es
Sab Jun 6 16:14:02 CEST 2009


Dr. Bobus escribió:
> Hola todos:
> 
> He leido cienes de veces sobre lo inseguro de emplear sustituciones de cadenas en las sentencias SQL
> 
> Esto es inseguro:
> 
> cosa = 'pp'
> c.execute("select * from pipo where algo= '%s'" % cosa)
> 

 >>> cosa = "' or '' = '"
 >>> "select * from pipo where algo= '%s'" % cosa
"select * from pipo where algo= '' or '' = ''"

En este caso te anulan tu condicion where forzando una lectura de todos los registros.



 >>> cosa = "';delete from articulos where '' = '"
 >>> "select * from pipo where algo= '%s'" % cosa
"select * from pipo where algo= '';delete from articulos where '' = ''"

Con este te borrarian todos los registros de la tabla 'articulos' (si la tienes claro)


> 
> 
> Esto no es inseguro
> 
> h = ('pp',)
> c.execute('select * from pipo where algo=?', h)
> 

 >>> import psycopg2 as pg
 >>> con = pg.connect("dbname=xx user=xxxxx")
 >>> c = con.cursor()
 >>> c.mogrify("select * from pipo where algo= %s", (cosa,))
"select * from pipo where algo= E''';delete from pipo where '''' = '''"

El driver ha escapado correctamente el parámetro para evitar lo que podria suceder en el caso anterior.

> 
> Me he limitado a seguir obedientemente las recomendaciones de mis mayores pero nunca he entendido porqué una cosa es insegura y la otra no y mucho menos cómo alguien puede inyectar nada dentro de un código. He leído varios ejemplos sobre inyectar código pero no me queda muy claro si para ello es necesario tener acceso directo al código o estamos hablando de introducir código a través de un form en html.
> 
> Alguien nos puede ilustar sobre este tema?
Espero haberlo hecho .. ;)


Saludos,

-- 
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es