passwords - traduccion - ¿Cuáles son las mejores reglas a seguir para que los personajes permitan una contraseña?
windows special characters (9)
Sin pensarlo en absoluto, solo quiero decir que debería permitir a cada personaje. En cualquier caso, se convierte en hash, y no quiero limitar a las personas que desean crear contraseñas seguras.
Sin embargo, al pensarlo más, hay muchos personajes que no tengo idea del efecto que tendrían en las cosas. Caracteres extraños, símbolos ascii, etc. para nombrar un par.
Intenté Google, pero no puedo encontrar un estándar definitivo para lo que hace la gente. Incluso la mayoría de las organizaciones profesionales no parecen saber. Parece ser una práctica común para muchos sitios el no permitir caracteres especiales, lo cual es una tontería y no es lo que quiero hacer.
De todos modos, ¿hay alguna recomendación estándar de longitud, caracteres permitidos, etc.?
No estoy seguro de si importa, pero usaré ASP.NET con C #
Agregue otro voto para "dejar que el usuario incluya todos los caracteres que su interfaz les permite ingresar". Ni siquiera rechazaría tabular o controlar caracteres. Su software tiene la capacidad de aceptar cadenas de bytes arbitrarias y hash, así que acepte cadenas de bytes arbitrarias como contraseñas. De lo contrario, reduce el espacio que un atacante debe buscar en un ataque de fuerza bruta o de diccionario.
(Por supuesto, incluso si permite todo, el 99% de los usuarios seguirán usando el nombre de su mascota como contraseña ...)
Cualquier carácter ASCII imprimible, que no sea un espacio en blanco (entre 33 y 126 inclusive) se permite normalmente en las contraseñas. Muchos profesionales de la seguridad (y comentaristas de SO) 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, las frases clave 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 mantenerla anotada en una nota adhesiva directamente en su monitor).
Algunos generadores de contraseñas fuertes usan un hash, así que pondría un límite muy alto en la longitud (512 o 1024) solo para ser inclusivo. Los generadores de contraseñas de hoy a menudo producen cadenas de 32-128 caracteres, pero quién sabe qué hashes se usarán en los próximos años.
Fundamentalmente, la mayor parte de la clase de caracteres Unicode debería estar permitida. Sin embargo, omita los caracteres de control (por ejemplo, 0-31 además del espacio), la marca de orden de bytes (0xfffe y oxfeff). Además, primero debe canonicalizar la representación para deshacerse de los problemas causados por las diferentes representaciones. Sin embargo, es posible que emita advertencias para los personajes que parecen ser demasiado difíciles de ingresar, pero los usuarios evitarán eso.
Los caracteres no ASCII sin duda dificultan las cosas a la hora de ingresar la contraseña en dispositivos limitados (móviles, consolas, etc.), pero generalmente no es imposible. Podría decirse que si el usuario quiere hacer eso, debe dejarlos. Es bastante fácil hacer algo razonable y consistente: codificar en UTF-8 antes de hacer hash, por ejemplo. Solo te meterías en dificultades si algún dispositivo de entrada enviara a los personajes como una composición (por ej. E + acento agudo en lugar de "e agudo") - pero sospecho que eso no sucedería en la vida real. (Puede descomponer todo usted mismo, pero eso sería un montón de problemas para buscar un caso extremo.)
Lo restringiría a caracteres imprimibles , sin embargo. Poner pestañas, formar fuentes, etc. en una contraseña realmente es buscar problemas.
No soy un experto, pero odio cuando los personajes que elijo y no tan extraños son rechazados. Entonces, creo que estoy de acuerdo con tu instinto.
Recuerde: Cuando almacene contraseñas, todas las contraseñas se deben cifrar con un algoritmo unidireccional como md5 de sha1. Dado que estos algoritmos siempre producen números hexadecimales, no necesita preocuparse por las inyecciones de SQL ni nada de eso.
Por lo tanto, siempre que puedas md5 o sha1 un personaje, se debe aceptar.
Respuesta corta: permita tanto como sea compatible con el respaldo del sistema. Hoy en día no hay excusa para no utilizar la compatibilidad total con Unicode para la entrada de texto, y eso incluye contraseñas. No creo que deba preocuparse por los problemas con los personajes, siempre y cuando se manejen literalmente (pero no soy un profesional en este campo, tenga cuidado con la inyección de sql).
Tengo una mascota molesta con los sitios que imponen restricciones a las contraseñas ... cualquier tipo de restricción. Me gustan los sitios que le dirán cuán sólida es su contraseña y le recomiendo que la fortalezca, pero forzar a un usuario a escribir al menos 8 caracteres, o requerir letras y números, etc. es simplemente frustrante.
Si necesita tener un tamaño de campo máximo (por ejemplo, para almacenar en una base de datos) intente que sea lo suficientemente grande para cualquier cosa que las personas escriban a mano. En realidad, no existe un campo de contraseña demasiado grande, ya que siempre existe la posibilidad de utilizar una contraseña segura automatizada y generada, pero de 64 a 128 caracteres sería suficiente.
Si está hablando de prevenir el tipo de ataques de inyección SQL, probablemente sea una mejor idea asegurarse de que su código haga lo que se supone que debe hacer, en lugar de confiar en restringir la entrada para que el problema sea más fácil.
Para caracteres no ascii, no lo veo como un problema más difícil si su entrada se puede representar correctamente como una cadena binaria (y no como texto ), que luego se pasa a su función de hash o generador de claves, etc.
Eventualmente, deberá imprimir la contraseña clara en un correo electrónico de confirmación enviado a sus usuarios.
PD: Podría considerar también problemas de codificación en el correo electrónico, si no es ascii estándar (por ejemplo, caracteres japoneses), es posible que un usuario no reciba el correo electrónico en el formato adecuado o simplemente no pueda leerlo en otro sistema debido a las fuentes no está siendo instalado.
Todo esto pesa en la gama de caracteres ascii "imprimibles".