Re: Seguridad en PostgreSQL

From: Gunnar Wolf <gwolf(at)gwolf(dot)org>
To: Juan Martínez <jeugenio(at)umcervantes(dot)cl>
Cc: Alejandro Gasca <agasca(at)yahoo(dot)com>, "Mario Gonzalez ( mario__ )" <gonzalemario(at)gmail(dot)com>, Jaime Casanova <systemguards(at)gmail(dot)com>, Roberto Pupo <roberto(dot)pupo(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Seguridad en PostgreSQL
Date: 2006-11-05 02:34:44
Message-ID: 20061105023444.GA8775@gwolf.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Juan Martínez dijo [Sat, Nov 04, 2006 at 05:08:47PM -0300]:
> > (...)
> >el atacante podrá borrar tu tabla completa. Claro, ¿cómo puedes
> >protegerte de esto? Evitando interpolar, usando statements preparados
> >y placeholders:
> >
> > $sth = $dbh->prepare('SELECT nombre, descripcion FROM articulo
> > WHERE id = ?');
> > $sth->execute($cgiparam{id});
> > ($nombre, $descripcion) = $sth->fetchrow_array;
> >
> >(mis ejemplos son en Perl, pero estas técnicas son iguales en
> >cualquier lenguaje)
>
> De hecho, yo uso una "técnica" que Postgres la permite, y hasta aquí
> nadie a dicho que sea mala (leyendo por internet)...
>
> $SQLcon = "SELECT nombre,descripcion FROM articulo WHERE id = '$id';";
>
> (En PHP esta vez)...
>
> El mal por inyeccion SQL no permitida se anula, pues lo que pongan en
> $id se considera como un string, por ende no se ejecuta, o me equivoco?
>
> Y claro...el atributo id es un int. Tambien se permite en UPDATE's y
> DELETE's.

No, no te protege en lo mas minimo. Por ejemplo, como crees que
manejaria el siguiente valor?

1'; DELETE FROM articulo; --

(los dos guiones indican que lo que siga es comentario y, por tanto,
ignoran si hay comillas balanceadas o cosas por el estilo)

Y no solo vale para eliminar o invocar otros comandos. Imagina que
haces tu autentificacion de usuarios asi:

$SQLcon = "SELECT id FROM usuario WHERE login='$login' AND password='$passwd';";

Pero por password te dan un:

' OR id = 1;--

Perfecto, tienes acceso como el usuario numero 1, tipicamente
administrador. O, claro, la de artilugios que se te ocurran :)

Usa placeholders.

Saludos,

--
Gunnar Wolf - gwolf(at)gwolf(dot)org - (+52-55)5623-0154 / 1451-2244
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Eliana Gutierrez 2006-11-05 03:13:47 Duda con los store procedure
Previous Message Fernando Aguada 2006-11-04 23:03:23 Poblema con Crystal Reports al llamar a una funcion