2012-08-31 16 views
6

Estoy trabajando en una aplicación web para mi proyecto de máster. Es un sistema para que los profesores administren proyectos de estudiantes, y utiliza Java para el código del lado del servidor, HSQLDB para la base de datos y JSP para la capa de presentación, y se ejecuta en tomcat. Los datos que se almacenarán no incluyen ninguna información confidencial (identificación del estudiante, información financiera, nada de eso), pero los nombres de usuario y las contraseñas son un requisito, por lo que quiero proteger las contraseñas en caso de que el estudiante use una contraseña para mi aplicación que usan para alguna otra aplicación más importante (sin dudas, esto sucederá incluso si le digo a la gente que no lo haga).Transmitir y proteger correctamente las contraseñas de los usuarios para una aplicación web

Nunca antes había considerado este tipo de cosas y estoy bastante perdido. Encontré un buen artículo explicando cómo usar Java a create a hash of a password, y encontré información en el tomcat documentation explicando cómo configurar el esquema de hash que se usa en los reinos y cómo hacer SSL with tomcat, así como también un JavaScript library para crear hash a partir de contraseñas, pero No estoy seguro de cómo juntar todas las piezas y qué piezas necesito exactamente.

Si utilizo la biblioteca de JavaScript para cifrar la contraseña y usar SSL para el paso de inicio de sesión (no es necesario porque creo que los demás datos no necesitan protección), almacene solo las versiones hash de contraseñas en la base de datos es suficiente? ¿O necesito hacer algo más? Me encontré con a question donde las respuestas discutieron PBKDF2 y algunas otras cosas, pero me confundió más ... Si debería usar uno de los esquemas mencionados en esas respuestas, ¿cómo hago para hacerlo? No he visto referencias a ellos en Tomcat u otra documentación, así que no sé cómo los usaría ...

Si alguien puede aclarar mi confusión y decirme cuál es la forma correcta de transmitir de forma segura y contraseña de la tienda es, realmente lo agradecería.

Respuesta

3

SSL se encarga de asegurar toda la capa de transporte. No necesita preocuparse por los datos que se envían a través de HTTPS.

Nunca almacene contraseñas reales en su base de datos. Solo almacene hashes salados hechos con funciones hash apropiadamente seguras (es decir, no MD5). Use una sal diferente para cada hash.

Si sigue estos principios, independientemente de los componentes que use, tendrá un mecanismo de almacenamiento de nombre de usuario/contraseña razonable.

+2

¡asegúrate de que salvas tus hash! – jtahlborn

+0

@jtahlborn, ¡Sí! ¿Cómo pude haber olvidado eso? Agregado a la respuesta, ¡gracias! – Brad

+0

puede garantizar el almacenamiento en el futuro almacenando el algoritmo utilizado con cada contraseña. que le permite actualizar el algoritmo en el futuro sin romper a los usuarios existentes. – jtahlborn

Cuestiones relacionadas