Pregunta

Sin pensarlo en absoluto, sólo quiero decir que debería permitir a todos los personajes.En cualquier caso, se aplica hash y no quiero limitar a las personas que desean crear contraseñas seguras.

Sin embargo, pensándolo mejor, hay muchos personajes que no tengo idea de qué efecto tendrían en las cosas.Caracteres extranjeros, símbolos ascii, etc.por nombrar una pareja.

Intenté buscar en Google pero no encuentro ningún estándar definitivo para lo que hace la gente.Incluso la mayoría de las organizaciones profesionales no parecen saberlo.Parece ser una práctica común en muchos sitios no permitir caracteres especiales por completo, lo cual es una tontería y no es lo que quiero hacer.

De todos modos, ¿existen recomendaciones estándar en cuanto a longitud, caracteres permitidos, etc.?

No estoy seguro de si importa, pero usaré ASP.NET con C#

¿Fue útil?

Solución

Cualquier, carácter ASCII no está en blanco imprimible (entre 33 y 126 inclusive) se permite típicamente en contraseñas. Muchos profesionales de la seguridad (y SO comentaristas) están aconsejando el uso de una frase de contraseña en lugar de una contraseña , por lo que tendría que permitir espacios. El argumento es que, debido a su longitud, y dado que las frases no están en el diccionario, frases de acceso son más difíciles de descifrar que las contraseñas. (Una frase de contraseña también puede ser más fácil de recordar, por lo que un usuario legítimo no tiene que mantenerlo escrito en una nota adhesiva-derecha en su monitor.)

fuertes generadores de contraseñas usan un hash, por lo que me gustaría poner un límite muy alto en la longitud (512 o 1024) sólo para estar inclusive. generadores de contraseñas hoy a menudo producen cadenas de caracteres 32-128, pero que sabe lo hashes se utilizará en los próximos años.

Otros consejos

Los caracteres no ASCII sin duda hacen las cosas más difíciles a la hora de introducir la contraseña en dispositivos limitados (móviles, consolas, etc.) - pero por lo general no imposible. Podría decirse que si el usuario quiere hacer eso, usted debe hacerles. Es bastante fácil de hacer una cosa razonable y coherente - codificar en UTF-8 antes de hash, por ejemplo. Sólo se obtendría en dificultades si algún dispositivo de entrada enviada a los personajes como una composición (por ejemplo, e + acento agudo en lugar de "correo aguda") - pero sospecha que wouldn' t ocurra en la vida real. (Se puede descomponer todo usted mismo, pero eso sería un montón de problemas para ir a por un caso extremo.)

Me restringirlo a imprimibles caracteres, sin embargo. Poner pestañas, etc en forma alimentaciones de una contraseña realmente es pidiendo problemas.

No es un experto, pero no me gusta cuando los personajes que elijan y no extraña que se rechazan. Por lo tanto, creo que estoy de acuerdo con su intestino.

Respuesta corta: permitir que tanto como el sistema de copia de seguridad que puede soportar. Hoy en día no hay realmente ninguna excusa para no utilizar el soporte completo de Unicode para la entrada de texto, y que incluye contraseñas. No creo que usted necesita preocuparse acerca de los problemas con los personajes, siempre y cuando ellos están manejados literalmente (pero no soy un profesional en este campo - cuidado de la inyección de SQL).

Tengo una manía contra los sitios que imponen restricciones a las contraseñas ... cualquier tipo de restricción. Me gustan los sitios que le dirá qué tan fuerte es su contraseña y recomendar que la hacen más fuerte, pero obligando a un usuario que escriba por lo menos 8 caracteres, o para requerir letras y números, etc., es simplemente frustrante.

Si usted necesita tener un tamaño máximo de campo (por ejemplo, para almacenar en una base de datos) a tratar de que sea lo suficientemente grande para que cualquier cosa que la gente tendría que escribir a mano. En realidad no hay tal cosa como un campo de contraseña demasiado grande ya que siempre existe la posibilidad de utilizar una, contraseña segura automatizado generado, pero 64 a 128 caracteres sin duda lo suficiente.

Fundamentalmente, se debería permitir la mayoría de la clase de caracteres Unicode.Sin embargo, omita los caracteres de control (p. ej.0-31 además del espacio), la marca de orden de bytes (0xfffe y oxfeff).Además, primero desea canonicalizar la representación para deshacerse de los problemas causados ​​por representaciones diferentes.Sin embargo, puede emitir advertencias para caracteres que parezcan demasiado difíciles de ingresar, pero los usuarios se protegerán contra eso ellos mismos.

Recuerde: Cuando almacene contraseñas, todas las contraseñas deben ser encriptados con un algoritmo unidireccional como MD5 de sha1. Dado que estos algoritmos siempre dan los números hexadecimales, usted no necesita preocuparse por las inyecciones SQL o algo por el estilo.

Por lo tanto, todo el tiempo que puede MD5 o SHA1 un personaje, que debe ser aceptado.

Si usted está hablando acerca de la prevención de tipo de inyección de SQL de ataques, es probablemente una mejor idea para asegurarse de que el código hace lo que se supone que debe hacer, en lugar de confiar en la restricción de la entrada por lo que el problema se vuelve más fácil.

Para los caracteres no ASCII, no veo eso como un problema más difícil si su entrada se puede representar correctamente como una cadena binaria (y no como texto ), que se pasa a continuación a su función hash o generador de claves, etc.

Añadir otro voto para "que el usuario pueda incluir cualquiera y todos los personajes que su interfaz permite que entren". No me incluso no permitir la ficha de control o caracteres. Su software tiene la capacidad de aceptar cadenas de bytes arbitrarias y croquetas de ellos, por lo acepte cadenas de bytes arbitrarias como contraseñas. Hacerlo de otra manera se reduce el espacio que un atacante debe buscar en una fuerza bruta o ataque de diccionario.

(Por supuesto, incluso si lo hace permitir todo, el 99% de los usuarios todavía utilizará el nombre de su mascota como su contraseña ...)

Con el tiempo puede que tenga que imprimir la contraseña claro en un correo electrónico enviado a confirmlation sus usuarios.

PD: puede ser que considere que también codifica problemas en el correo electrónico, si no es ASCII estándar, es posible que un usuario no recibirá el correo electrónico en el formato adecuado o simplemente no pueden leerlo en otro sistema (por ejemplo, caracteres japoneses). debido a las fuentes no está instalado.

Todo esto pesa en los caracteres ASCII "imprimibles" rango.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top