2010-09-19 24 views
13

Estoy agregando una funcionalidad de "cambio de contraseña" a mi juego web http://ninjawars.net, que actualmente tiene contraseñas corregidas (y esencialmente nunca cambia).¿Qué medidas de seguridad se deben tomar al crear la funcionalidad "cambiar su contraseña"?

Quiero evitar hacer un lío, así que me gustaría asegurarme de que tengo las bases de seguridad básicas cubiertas.

Tomando lo que puedo sacar de manera de hacer las cosas de facebook, algunos puntos que hay que recordar los puntos clave son:

  • Requerir contraseña antigua (por supuesto).
  • Confirme la nueva entrada de contraseña dos veces.
  • cerrar la sesión de la cuenta (¿solo en todas las otras páginas, de alguna manera)?
  • Requiere una longitud de contraseña segura & que la contraseña se ajuste a todos [inserte varios criterios aquí] necesarios para contraseñas en cada sistema específico.
  • Requiere nueva contraseña para ser diferente de la contraseña anterior.
  • Evita múltiples intentos de cambio de contraseña.

Facebook también:
- Requiere nueva contraseña a ser diferentes de las contraseñas anteriores. (parece un uso de mayúsculas)

Esas son solo las políticas que puedo obtener de la interfaz de usuario externa del sistema de cuentas de Facebook. ¿Qué otros puntos de seguridad debo cubrir al proporcionar un sistema de "cambio de contraseña"?

Editar: En mi caso particular tengo la intención de ser relativamente permisiva con el [insertar varios criterios] por lo que los personajes tendrán que entrar en la propia contraseña. Mi sitio no es un banco, si un jugador quiere usar la contraseña "contraseña1", entonces deberían esperar que sus amigos se hagan cargo de su cuenta. MI ENFOQUE por otro lado, es asegurarme de que mi sitio evite cualquier posibilidad de "adquisición hostil" mediante cualquier tipo de inseguridad en el sistema de cambio de contraseña en sí mismo.

Más buenos puntos de las respuestas a continuación: Aviso

  • Send de los cambios de contraseña al email del usuario.
  • Mantenga el cambio de correo electrónico y el cambio de contraseña cada uno dependiente el uno del otro.
  • Utilice una conexión segura encriptada (https) para dichos cambios.

Respuesta

8

Mantenga el cambio de la contraseña y cualquier cambio en la dirección de correo electrónico por separado. De esa forma cualquiera que quiera cambiar cualquiera de los dos debe saber ambos.

Cuando el usuario solicita una contraseña, envíele un correo electrónico con el enlace a la página. Esto confirmará que son el propietario de la cuenta y les alertará si alguien está tratando de acceder a su cuenta. Luego, cuando se haya cambiado la contraseña, envíeles por correo electrónico la confirmación.

+0

Ah, eso puede ser mejor que mi solución actual, que es almacenar el correo electrónico principal indefinidamente y avisos por correo electrónico en caso de solicitudes de cambio de cuenta, para que nadie pueda entrar, cambiar el correo electrónico y cambiar la contraseña, evitando el usuario puede acceder a la cuenta incluso restableciendo la contraseña. – Kzqai

1

Creo que también debe comprobar si la contraseña no coincide con la del inicio de sesión. Algunos usuarios hacen eso, créanme.

+0

Bueno, eso entraría en el reino de asegurarse de que los jugadores -contraseña- sean una buena contraseña, que es un tema interminable que he visto abordado muchas veces en este sitio. Sin embargo, no hemos podido encontrar consejos sobre cómo proteger el sistema de "cambiar tu contraseña". – Kzqai

1

Realmente depende de qué tipo de información esté protegida por la contraseña. Por ejemplo, el requisito de contraseña si tiene información financiera del usuario debería ser muy diferente de si solo tiene su nombre o algo así. Además, tenga en cuenta que los requisitos de contraseña dictatorial solo alentarán a los usuarios a crear contraseñas inseguras que cumplan con los requisitos.Debes tener un límite bastante alto en la cantidad de caracteres que permites en la contraseña (si los usuarios desean que sus contraseñas sean más fuertes, déjalos). También debe permitir a los usuarios usar mayúsculas y minúsculas, permitirles usar dígitos y también permitirles usar símbolos en la contraseña.

En cuanto a requerir que la contraseña sea suficientemente segura, debe asegurarse de que no sea idéntica a las contraseñas anteriores excepto por un dígito (por ejemplo, aumentar una fecha en una contraseña), debe asegurarse de que no esté en la parte superior XXX lista de contraseñas comunes (por ejemplo, no permita "contraseña1"), debe asegurarse de que la contraseña no contenga el nombre de usuario o la dirección de correo electrónico del usuario. En el formulario de cambio de contraseña, debe advertir a los usuarios que no utilicen la misma contraseña que usan para su dirección de correo electrónico (o cualquier otra cuenta que conecten con su sitio web), aunque obviamente no debe intentar iniciar sesión en esos servicios conectados a Mira esto.

+3

Considero que estos requisitos son increíblemente arbitrarios sin ofrecer mucha más seguridad. Para un juego, mi opinión sobre los requisitos de contraseña es básicamente no tener ninguno. No confíe en la información del usuario para nada más allá de la experiencia de juego del usuario, independientemente de si ha iniciado sesión legítimamente o no, y asegúrese de no ser responsable por daños y perjuicios como resultado del descifrado de su contraseña. Entonces no es asunto tuyo y tus usuarios no se enfadarán por los requisitos arbitrarios. En resumen, si usted como servidor se ve afectado negativamente por la piratería de la cuenta de algún usuario, ya ha fallado. –

+0

Esa es (casi) exactamente la postura que ya he tomado con las contraseñas en el sitio. Las contraseñas son hash seguras (8 iteraciones), seguridad en el sistema de contraseñas, largas frases permitidas ... ... pero no una enorme/grotesca lista de requisitos sobre la elección de la contraseña del usuario. Planeo agregar una js "esta es la fuerza y ​​la debilidad de tu contraseña" cerca de los campos de contraseña, pero no voy a forzar a los usuarios casuales de mi juego a usar contraseñas no memorables como "& (& fa87 87j ljcow "a menos que lo deseen. Simplemente no quiero que mi sistema sea la causa de una cuenta. – Kzqai

+2

¿Qué significa" hash de forma segura (8 iteraciones) "en detalle? ¿Por qué no solo una iteración usando un hash fuerte? algoritmo? –

0

Estaba pensando en este problema hoy.

En lugar de los requisitos de complejidad normales, creo que sería interesante descargar una de las tablas rainbow disponibles de MD5 y lanzar esas contraseñas en una base de datos NoSQL. Luego, cuando un usuario va a configurar su contraseña, intente buscar la contraseña que elija. Si lo encuentras, rechaza esa contraseña.

A escala, esto se puede hacer con solo una o dos cajas dedicadas que alojan un servicio de búsqueda, ya que establecer/cambiar una contraseña es una actividad tan poco frecuente.

+1

Oh, eso es genial, solo tengo que cambiar mi contraseña de vez en cuando a DDOS en su servidor. :) –

2

Una cosa que veo ocasionalmente es enviar un correo electrónico automatizado al correo electrónico en el archivo notificando el cambio de contraseña. Esto daría una oportunidad/enlace para que el destinatario revierte los cambios si se hicieron involuntariamente o maliciosamente. Obviamente, esto requeriría un período de advertencia similar para cambiar las direcciones de correo electrónico para proporcionar más seguridad.

+0

Excelente, gracias. – Kzqai

2

Noté que nadie ha sugerido esto todavía, o me faltan algunas de las sutilezas en la respuesta de los demás.

Solo permite cambiar la contraseña solo si el usuario conoce una "cadena secreta" que se enviará a su dirección de correo electrónico cuando solicite un cambio de contraseña. Para su comodidad, puede hacer que esta "cadena secreta" sea una URL, para que puedan hacer clic rápidamente en su correo electrónico. Esto asegura que la persona que solicita el cambio de contraseña también puede iniciar sesión en el correo electrónico registrado (las personas tienden a estar más relajadas con su cuenta de juego que con su dirección de correo electrónico privada).

Como ha mencionado ChrisF, deberá asegurarse de que la persona no pueda cambiar la contraseña y el correo electrónico simultáneamente. También deberá asegurarse de que cambiar el correo electrónico requiera el conocimiento de la contraseña actual (probablemente no necesite que el usuario pueda iniciar sesión en su correo electrónico anterior para leer una "cadena secreta", ya que la razón principal para cambiar la dirección de correo electrónico es porque perder su dirección de correo electrónico anterior).

2

Un giro interesante que me gustaría es si introduzco una contraseña muy larga, no me obligue a incluir algunos tipos específicos de caracteres. Muchos sistemas requieren combinaciones realmente intrincadas de letras, mayúsculas, números y caracteres especiales que inevitablemente terminan creando una contraseña de 6 caracteres "aprobados" cuando todo lo que quería eran 35 caracteres en mayúsculas, pero eso fue rechazado por ser "inseguro".Hah ^^

Además, si está utilizando cualquier biblioteca de clase, marco o plantilla que tenga incorporada la función de código real, úsela en lugar de hacerla suya. De hecho, incluso si no, mire los complementos bien probados o las soluciones externas (¿OpenId?) - la seguridad es difícil y uno de los peores lugares para reinventar las ruedas en imo.

+0

Odio los sitios que no aceptan mis contraseñas exactamente en esta situación. Si puede descifrar "b9r7idhkeuumaedfa9mpwuphetmgnfkh7uak" mediante la fuerza bruta, incluir un carácter no alfanumérico no lo hará más seguro. –

+0

¿Cómo puedes recordar esa contraseña? – Philippe

+0

¡Utilizo una oración! Me gusta "¡Hoy voy a sacudir el mundo otra vez!" o lo que sea ... muy fácil de recordar, muy rápido de escribir, por lo que es difícil de hackear. Pero odio tener que infundir números, es tonto si es lo suficientemente largo ^^ –

4

Esto es probablemente obvio, pero recuerde hacer todo el proceso de cambio de contraseña a través de una conexión cifrada (HTTPS).

Cuestiones relacionadas