Re: Seguridad en PostgreSQL

From: Juan Martínez <jeugenio(at)umcervantes(dot)cl>
To: Gunnar Wolf <gwolf(at)gwolf(dot)org>
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-04 20:08:47
Message-ID: 454CF34F.3070006@umcervantes.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gunnar Wolf escribió:
> Alejandro Gasca dijo [Fri, Nov 03, 2006 at 12:25:37PM -0600]:
>> Algun link para aprender sobre ataques reales de seguridad a postgres?
>
> Una de las mejores es esta:
>
> http://www.google.com.mx/search?q=postgresql+vulnerability

Si, en general los mejores link de internet son lo que conmienzan con un
www.google.... ;-)

[...]

>> por otro lado, yo tambien tengo la idea que es buena practica ocultar
>> lo mas que se pueda de la estructura de la base al "usuario final",
>> aunque confieso que *no se realmente* en que ayuda eso a evitar ataques
>> a la base... como dicen, es mas una medida de "ocultamiento" que puede
>> eventualmente ocultar los mismo errores en el diseño de la base, y pues
>> eso sale peor.
>
> No sólo es respecto al diseño de la base, sino que de tu
> aplicación. Por ejemplo, si el usuario recibe un mensaje de error
> indicando que en la tabla "articulos" no existe el ID 450, puede
> buscar dónde en la solicitud Web está pidiendo un 450, y generar una
> solicitud en que reemplace a ese número por otro, tal vez desplegando
> un artículo al que no tiene acceso. O tal vez reemplazándolo por un
> bonito:
>
> 450; DELETE FROM articulo; --
>
> con lo que si tu aplicación está mal escrita e interpola la entrada
> del usuario directamente en tu SQL:
>
> ($nombre, $descripcion) = $dbh->selectrow_array("SELECT nombre,
> descripcion FROM articulo WHERE id = $cgiparam{id}");
>
> 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.

--
Juan Martinez G.
Departamento de Informatica
Universidad Miguel de Cervantes

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2006-11-04 21:14:19 Re: Seguridad en PostgreSQL
Previous Message Edwin Quijada 2006-11-04 19:31:43 Re: Seguridad en PostgreSQL