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
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 |