Posteado por: spideep | 29 julio 2007

Recomendaciones de Seguridad en Autenticación de Usuarios

Estas son recomendaciones básicas que no deben faltar en la implementación de un servicio de autenticación de usuarios.

  1. Los nombres y passwords debe ser mínimo de 6 caracteres.
  2. Cuando un logueo falla, debemos ser lo más escuetos posibles al responder. Por ejemplo no debemos usar mensajes como: “Su usuario no esta en la base de datos” ó “Su contraseña debe contener X caracteres”, simplemente algo como “Su intento ha fallado, vuelva a intentarlo más tarde” o algo por el estilo, de lo contrario damos demasiada información a los potenciales atacantes de nuestro sitio.
  3. Manejar los errores con cuidado, colocando el arroba (@) antes de cualquier llamada de PHP o deshabilitando en el archivo de configuración la muestra de errores evitaremos mostrar más información de la necesaria, por ejemplo, si llamáramos a una base de datos con el servicio caído, le mostraría a los usuarios el nombre de la base de datos a la que queremos acceder aparte de que la presentación poco profesional que los errores implican.
  4. Las contraseñas deben encriptarse (SHA-1). Si alguien por medio alguno llegara a acceder a nuestra tabla de usuarios , podrían ver los nombres de usuarios más no descifrar las contraseñas. El campo contraseña o password (para dejar de lano la ñ) debe ser de 40 caracteres de largo, para soportar la encriptación SHA-1. Antes de comparar la contraseña ingresada por el usuario con la alojada en bd, debe usarse la función sha1() para encriptarla.
  5. No usar “admin”, “administrador”, “administrator”, “root” o cualquier cosa que se le parezca para el usuario administrador, hay que buscar otras opciones que den la misma idea pero que sean más originales y difíciles de adivinar.
  6. Hay que hacer un log para registrar datos importantes como el número de logueos de un usuario, la fecha de la última vez que se logueó, quizá el tiempo que duró y también el número de intentos fallidos.
  7. Eliminar backslashes, HTML, SQL y PHP tags de cualquier data ingresada en un formulario. Si alguien maliciosamente tratara de enviar código HTML, SQL o PHP a través de un campo de formulario, podría distorsionar o malograr el código. Usar las siguientes funciones de PHP: strip_tags(), str_replace() and stripslashes().
  8. Limitar en 1 los resultados de la sentencia SQL usando LIMIT 1, pues si alguien lograra inyectar sentencias sql, éstas mostrarían solamente un resultado, limitando la cantidad de data que pueda ser vista.
  9. Usar la opción “maxlength” de los input HTML, por ejemplo si el nombre de usuario no puede ser mayor a 8, entonces: <input size=”8″ maxlength=”8″ type=”text”>
  10. Reducir al mínimo el largo de los datos introducidos, no confiar ciegamente en la opción maxlength o la buena voluntad del usuario de ingresar una cadena del tamaño adecuado, hay que cortarla con la función substr(), por ejemplo: $user=@substr($user,0,8).
  11. Verificar el referer, asegurarse que el código pregunte por el HTTP_REFERER para estar seguros que el pedido viene de nuestro formulario, de no ser así hay que rechazarlo. Aunque este método no es confiable, será una barrera contra lo spam bots y los atacantes inexpertos.
  12. Si el formulario usara el método $_POST para enviar la data, hay que asegurarse que esa información se obtenga usando $_POST, y no $_REQUEST. Pues ésta última es permisible a que alguien pase datos vía $_GET al final del URL.
  13. SSL Encryption (https), para mayor seguridad de la data enviada por internet, se puede obtener un certificado SSL para encriptar la página de logueo.
  14. En general, limitar el acceso del usuario a funciones exclusivas de su rol. Diseñar el sistema para dar al usuario ciertas capas y accesos, no todos necesitan control total. Hay que clasificar a los usuarios según roles y funciones únicos y darles permisos de acuerdo a estos roles. Si se tienen usuarios multiroles, darle los accesos en consideración a los roles establecidos.
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

A %d blogueros les gusta esto: