20060528

Seguridad en aplicaciones Web

Últimamente estoy haciendo cositas en PHP+mySQL (utilizo el editor Kate, que reconoce el lenguaje -creo que hasta PHP4- y, al utilizar distintos colores para el texto, facilita mucho la lectura), y me he interesado en temas de seguridad.

Ya hace tiempo leí (creo que era en una revista de Oracle.. la mandan gratuitamente) que era mejor guardar un hash (md5, sha1 y funciones por el estilo) del password, a guardar el propio password en la BBDD de usuarios.

Y ahora algo relacionado con la seguridad: un artículo encontrado en Barrapunto, que trata del mismo tema (de ésta charla):




para evitar la inyeccion de codigo, funciona muy bien lo siguienta:

seguridad:

* Escapar los datos con las herramientas nativas del sistema, nunca intentar escapar sql a mano
* Utilizar mecanismos de objetos (como los que tiene VB.NET) en lugar de construir sentencias a mano
* Utilizar procedimientos almacenados
* Utilizar un lenguaje fuertemente tipado, y utilizar los tipos de este lenguaje

defensas en profunidad:

* Crear usuarios con permisos limitados y usarlos, utilizando la regla "los minimos permisos necesarios para poder realizar su labor"
* Expresar lo que se quiere transmitir al interprete relacional lo que se quiere decir con abundantes parentesis
* Utilizar procedimientos almacenados.

defensas por la oscuridad:

* Mantener la estructura de la base de datos secreta (=no volcar los errores al usuario con todo lujo de detalles internos :D)
* Utilizar Vistas y no las tablas directamente.
* Utilizar procedimientos almacenados.

matenimiento:

* Lanzar el proceso de la base de datos con pocos privilegios.
* Estudiar que tipos de SQL ejecuta dentro de un entorno seguro (para evitar un XSS de un log)
* Actualizar el servidor de SQL cuando aparezcan vulnerabilidad para la version que se utiliza. Con caracter de urgencia si esta conectado a internet.

La cantidad y la profundidad de estas medidas que se apliquen depende de las herramientas que utilicemos, de lo profesionales y expertos que seamos, y de lo que este dispuesto a pagar el cliente. Si hay un absoluto minimo, es utilizar las herramientas de escape de SQL del sistema.

No hay comentarios: