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