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-06 01:41:42 |
Message-ID: | 20061106014142.GA2258@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 06:53:31PM -0300]:
> >Tienes "magic_quotes" o algo asi activado? Prueba desactivandolo.
>
> Mmm...a ver:
>
> en php.ini
>
> magic_quotes_gpc = On
> magic_quotes_runtime = Off
> magic_quotes_sybase = Off
>
> Creo que para este caso, la linea relevante es la de
> magic_quotes_runtime, si no me equivoco...de todas maneras, estas lineas
> vienen así desde el paquete de debian.
>
> >El problema es que muchas aplicaciones simplemente asumen que eso va a
> >funcionar bien, pero resulta que algun hosting tiene que desactivar
> >magic_quotes porque otra aplicacion asume que _no_ esta activo y ahi
> >empiezan los problemas.
>
> Si...entiendo...No es mi caso.
Apuntalando un poco lo que dice Alvaro: El problema puede no
presentarse en tu entorno actual... Pero si te acostumbras a programar
utilizando practicas potencialmente peligrosas, tarde o temprano
caeras en un agujero. Mejor acostumbrate a hacer las cosas bien ;-)
> Solo para cerrar el tema. Como medida de seguridad, yo invento usuarios
> en postgres que tendrán accesos determinados para ejecutar comandos
> especificos (un usuario para los SELECT, otro para los UPDATES,...)
> exclusivos para la aplicacion web (los controlo ademas por pg_hba.conf)
En mi experiencia, si bien esto ayuda bastante, agrega demasiada
complejidad al tener que acordarte de menear por todos lados varias
conexiones a la BD, y acordarte de usar la indicada cada vez. Aparte,
en el contexto de una inyeccion de SQL, te salvan de ejemplos como el
que te presente, pero si -digamos- piensas en la autenticacion de
usuarios:
"SELECT id FROM usuario WHERE login = '$login' AND password = '$passwd';"
Y recibes como password:
' OR true
pues... Te brincaste por completo la autenticacion, sin abusar de los
privilegios del usuario de solo-SELECT :)
> Cuando se trata de hacer un query que se arma a partir de algo que se le
> pregunta al usuario (en un campo INPUT type="text" por ejemplo), suelo
> tener una funcion en PHP que al recibir el dato:
>
> $texto_buscar = anti_indeseables($_REQUEST['texto_buscar']);
>
> elimina palabras claves de SQL, como precisamente "DELETE FROM ..." o
> "ALTER USER ... WITH PASSWORD ...", etc., y lo que quede se va al query...
>
> Digamos que eso me da mediana seguridad. De todas maneras es obligada la
> lectura diaria de los log de postgres (log_statement=all)...
Es un paso indeseable y molesto que tienes que hacer una y otra vez. Y
no solo en los INPUT abiertos, recuerda que un atacante puede generar
solicitudes HTML con entradas arbitrarias en _cualquier_ campo.
Mejor usa mecanismos robustos :) Los placeholders no son la panacea,
pero te ahorran muuuucho trabajo como el que estas duplicando aqui.
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
From | Date | Subject | |
---|---|---|---|
Next Message | Linder Poclaba | 2006-11-06 01:44:31 | Re: Procedure en postgres |
Previous Message | Hensa | 2006-11-06 00:40:50 | RE: Procedure en postgres |