una simbolos que puedo perfecta numeros letras inválido hacer formato especial dificiles contraseñas contraseña con como clave caracteres caracter alfanuméricos aceptables unicode passwords

simbolos - ¿Debo soportar Unicode en contraseñas?



contraseñas de 8 caracteres dificiles (10)

Me gustaría permitir que mis usuarios usen Unicode para sus contraseñas.

Sin embargo, veo que muchos sitios no lo admiten (por ejemplo, Gmail, Hotmail).

Así que me pregunto si hay algún problema técnico o de usabilidad que esté pasando por alto.

Estoy pensando que, en todo caso, debe ser un problema de usabilidad, ya que, por defecto, .NET acepta Unicode y si Hotmail, el nuevo Live mail, está basado en eso, no veo por qué lo restringirían.

¿Alguien ha encontrado problemas similares?


Así que me pregunto si hay algún problema técnico o de usabilidad que esté pasando por alto.

Existe un problema técnico con las contraseñas que no son ASCII (y los nombres de usuario, para el caso) con Autenticación básica HTTP. Por lo que sé, los sitios que mencionaste generalmente no usan la Autenticación básica, pero podría ser una resaca de los sistemas que sí lo hacen.

El estándar de Autenticación Básica HTTP define un username:password codificado en base64 username:password token de username:password . Esto significa que si tiene dos puntos en el nombre de usuario o contraseña, los resultados son ambiguos. Además, la descodificación en base64 del token le da solo bytes, sin dirección de cómo convertir esos bytes a caracteres. ¿Y adivina qué? Los diferentes navegadores usan diferentes codificaciones para hacerlo.

  • Opera y Chrome usan UTF-8.

  • IE usa la página de códigos predeterminada del sistema del cliente (que, por supuesto, nunca es UTF-8) y deshace los caracteres que no encajan en ella utilizando el estándar de Windows. Intenta encontrar un personaje que se parece un poco, o quizás no (quién Algoritmo.

  • Safari usa ISO-8859-1 y se niega silenciosamente a enviar cualquier token de autenticación cuando el nombre de usuario o la contraseña tienen caracteres que no encajan.

  • Mozilla toma los 8 bits más bajos del punto de código (similar a ISO-8859-1, pero más roto). Vea el error 41489 para una discusión tortuosa sin resultado ni progreso.

Entonces, si permite nombres de usuario o contraseñas que no sean ASCII, el proceso de Autenticación básica será, en el mejor de los casos, complicado e inconsistente, y los usuarios se preguntan por qué funciona aleatoriamente o falla al usar computadoras o navegadores diferentes.


Admitir contraseñas Unicode en todas mis aplicaciones web. Si utiliza un navegador reciente, el visitante puede usar cualquier punto de código en sus scripts preferidos o nativos.

Para una seguridad mejorada, almaceno un hash salado en lugar de usar encriptación reversible.

Lo importante es normalizar correctamente y codificar la cadena de contraseña antes de agregar la secuencia de bytes al hash (prefiero UTF-8 para la independencia endian).



En general, estoy totalmente a favor de no restringir qué tipos de caracteres están permitidos en las contraseñas. Sin embargo, recuerde que tiene que comparar algo con algo almacenado que puede ser la contraseña o un hash. En el primer caso, debe asegurarse de que la comparación se realice correctamente, lo cual es mucho más complejo con Unicode que con ASCII solo; en este último caso, debe asegurarse de que está haciendo exactamente lo mismo cada vez que se ingresa. Las formas de normalización pueden ayudar aquí o ser una maldición, dependiendo de quién las aplique.

Por ejemplo, en una aplicación en la que estoy trabajando estoy usando un hash sobre una conversión UTF-8 de la contraseña que se normalizó de antemano para eliminar posibles problemas con la combinación de caracteres y cosas así.

El mayor problema que puede enfrentar el usuario es que no puede ingresarlo en algunos lugares, como en otro diseño de teclado. Este es el caso de una de mis contraseñas, pero nunca fue un problema hasta ahora. Y, después de todo, esa es una decisión que el usuario debe tomar al elegir su contraseña y no una que la aplicación deba hacer en nombre del usuario. Dudo que haya usuarios que utilicen felizmente Unicode arbitrario en sus contraseñas y no piensen en los problemas que pueden surgir al usar otro diseño de teclado. (Sin embargo, esto puede ser un problema para los servicios basados ​​en la web más que cualquier otra cosa).

Sin embargo, hay casos donde Unicode está correctamente prohibido. Un ejemplo de esto es TrueCrypt, que obliga a utilizar el diseño de teclado de los EE. UU. Para las contraseñas de arranque (para el cifrado de volumen completo). No hay otro diseño allí y, por lo tanto, Unicode o cualquier otro diseño de teclado solo produce problemas.

Sin embargo, eso no explica por qué prohíben Unicode en contraseñas normales. Una advertencia puede ser agradable, pero prohibir directamente es malo a mis ojos.


Estoy seguro de que las contrapartes multilingües de esos sitios admiten Unicode. Suena como un problema de requisitos del usuario en lugar de un desafío técnico.


Estoy seguro de que no hay ningún problema técnico, pero tal vez Gmail y Hotmail no lo respaldan a propósito. Este tipo de sitios web tiene una amplia audiencia y debe ser accesible desde cualquier lugar.

Imaginemos que el usuario tiene una contraseña en japonés, pero está de viaje y va a un cibercafé y no hay soporte japonés que el usuario no pueda iniciar sesión.

Otro problema es analizar la complejidad de la contraseña, no es tan difícil asegurarse de que el usuario no haya escrito una palabra común en inglés, pero qué hay en chino / ruso / tailandés. Es mucho más difícil analizar la complejidad de una contraseña a medida que agrega más idiomas.

Entonces, en caso de que desee que su sistema sea accesible, es mejor asegurarse de que el usuario pueda escribir su contraseña en todo tipo de dispositivos / sistemas operativos / entornos, de modo que la contraseña alfanumérica con la mayoría de los símbolos comunes ( !<>"#$%& etc.) es una especie de buen conjunto de caracteres disponibles en todas partes.


No me sorprendería si hay un problema técnico con el servidor que no está seguro de la codificación en la que el cliente está enviando la contraseña.

Sin embargo, supongo que, por ejemplo, los sitios con audiencias principalmente de habla nativa japonesa, china o rusa usarían el conjunto de caracteres no ASCII utilizado habitualmente (Big5, EUC-KR, koi8, etc.) para las contraseñas. Tal vez puedas investigar qué están haciendo para lidiar con clientes web antiguos que usan cualquiera de los elementos que no son Unicode.


No. Restringir contraseñas a caracteres ASCII.

Cuando ingresa una contraseña, se muestran viñetas para ocultar la contraseña.

Pero cuando ingresa japonés y otros idiomas, debe pasar por un método de entrada, convirtiendo las teclas en los caracteres deseados. Esto requiere que veas qué son los personajes.


Unicode apesta si tiene que hacer una coincidencia programática. El "signo menos" y "guión" tienen el mismo aspecto, pero podrían ser códigos separados. "n con una tilde graciosa sobre él" podría ser una letra, o un signo diacrítico y una letra.

Si las personas usan diferentes métodos de codificación, es posible que sus contraseñas no coincidan, aunque las contraseñas tengan el mismo aspecto. Ver omg-ponies aka humanidad = falla épica .

Puedes normalizar, pero ¿qué sucede cuando:

  • las reglas de normalización cambian
  • tienes algunos usuarios con signos diacríticos en su contraseña
  • tienes algunos usuarios con letras combinadas en su contraseña
  • las contraseñas son hash, por lo que no puede cambiar las contraseñas

Adivina qué: debes forzar el restablecimiento de contraseña en algunos de tus usuarios.


con HTML 5, con la capacidad de enviar a los usuarios una fuente, puede integrar un teclado visual en su sistema, para que los usuarios puedan usar su idioma,

Sugerencia: use la fuente Deja Vu y FontForge con FontForge para que pueda hacerla más pequeña; luego, con un teclado visual javascript, puede hacerlo posible;)

Mira aquí , es un proyecto donde hice el truco.