Re: Simbolos dentro de cadenas

From: Henry <hensa22(at)yahoo(dot)es>
To: Gunnar Wolf <gwolf(at)gwolf(dot)org>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Simbolos dentro de cadenas
Date: 2007-03-16 01:51:34
Message-ID: 842515.8284.qm@web30802.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gunnar Wolf <gwolf(at)gwolf(dot)org> escribió:

> lo que quiero decir es que cuando usas una funcion en postgres para alguna operacion,
> se pone implemente
>
> select * from tabla where campo=parametro_1;
>
> en cambio cuando usas algo asi en alguna app,
> la mayoria de lenguaje lo usan asi:
>
> sql="select * from tabla='" + parametro_1 + "'"; (creo que power builder no)

ok, si falto poner where campo=..... en el select que puse de ejemplo, por eso hay un ' despues del =

> y ya sabemos que puede pasar, si un usuario pone un valor mal
> intencionado en parametro_1, al menos que primero asegures que
> parametro_1 es un valor adecuado para la consulta, osea tendria que
> crear alguna subrutina para esto, la mayoria de aplicaciones ya
> vienen con subrutinas para esto, algo como 'prepare' o algo asi.

>sql = "select dame_resultados(" + parametro_1 + ")";

yo no uso esa forma para llamar a las funciones desde mi app, por eso no tengo problemas de ese tipo.


>parametro_1 sigue viajando como parte de la cadena. Y por más que
>protejas a tu función, ¿qué pasa si parametro_1 contiene:

>1); delete from tabla; --

>Pese al blindaje que intentaste poner a través de la función
>dame_resultados, el usuario te está inyectando un delete from tabla
>como si nada. Sin embargo, si tienes (evitando notaciones específicas
>a lenguajes, inventando sintaxis):

>statement = pg_prepare("select * from tabla where id = ?")
>statement.execute(parametro_1)

>te puedes olvidar de inyecciones de SQL - El '?' se vuelve un
>"placeholder" - un elemento que será reemplazado en la consulta (ya
>compilada y procesada por el motor de Postgres) por la consulta que
>vayas a hacer.

> es por eso que tambien evito en lo posible usar la sentencia
> 'execute' de postgres, al menos que sea yo mismo quien ponga los
> valores para armar la consulta.

bueno, saludos y gracias por una replica alturada.


---------------------------------

LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gabriel Colina 2007-03-16 02:05:21 Re: acerac de union
Previous Message Gunnar Wolf 2007-03-16 01:17:04 Re: Simbolos dentro de cadenas