5

Esta es una pregunta un poco delicada, no dude en decirme si hay un lugar mejor para esto.Expectativas del usuario y normalización Unicode

Estoy desarrollando un código que acepta una contraseña que requiere caracteres internacionales, así que tendré que comparar una cadena Unicode de entrada con una cadena Unicode almacenada. Suficientemente fácil.

Mi pregunta es esta: ¿los usuarios de juegos de caracteres internacionales generalmente esperan la normalización en tal caso? Mis búsquedas de Google muestran algunos conflictos en la opinión de 'always do it' (http://unicode.org/faq/normalization.html) para 'no molestar'. ¿Hay algún pros/contra para no normalizar? (es decir, es menos probable que pueda adivinar una contraseña, etc.)

Respuesta

5

Recomendaría que si su campo de contraseña acepta la entrada Unicode (supuestamente UTF-8 o UTF-16), que lo normalice antes de hacer hash y comparar. Si no lo normaliza, y las personas acceden a él desde diferentes sistemas (diferentes sistemas operativos o diferentes navegadores si es una aplicación web o con diferentes configuraciones regionales), entonces puede obtener la misma contraseña representada con una normalización diferente. Esto significaría que su usuario escribiría la contraseña correcta, pero la rechazaría, y no sería obvio por qué, ni tendría manera de solucionarla.

+0

Derecha. Convierta y almacene todo en formato NFD. – tchrist

-3

no me molestaría por un par de razones:

  1. Vas a hacer las cosas menos seguro. Si dos o más caracteres están todos representados en su base de datos como la misma cosa, eso significa que hay menos contraseñas posibles para el sitio. (Aunque esto probablemente no sea un gran problema, ya que la cantidad de contraseñas posibles es bastante grande.)
  2. Construirá código en su programa que hace un trabajo complicado que es (probablemente) parte de una biblioteca que no hizo escribe ... y eventualmente alguien no podrá iniciar sesión como resultado. Mejor en mi mente mantener las cosas simples, y confiar en que las personas que usan juegos de caracteres diferentes saben cómo escribirlos correctamente. Dicho esto, nunca lo he implementado en una contraseña internacional, así que no puedo decir cuál es el patrón de diseño estándar.