2010-07-03 15 views
7

¿Hay algo especial acerca de los caracteres que deberían permitirse/no permitirse en una contraseña?¿No se permiten los caracteres en una contraseña?

Guardo la contraseña en db hashed/salado y uso PDO para evitar la inyección. ¿Es lo que estoy haciendo lo suficiente? Recientemente me encontré con un sistema que no permitía el uso de varios personajes, no los recuerdo a todos, pero uno fue el ampersand &. ¿Lo hacían por razones de inyección de anti-base de datos, o hay algo más que me falta? ¿Deben los caracteres de la contraseña restringirse a un cierto conjunto de caracteres o no es necesario?

+2

No recuerdo que ningún carácter sea un problema si está usando marcadores de posición, pero podría estar equivocado ya que no conozco a todo el guardabosques ni a otros idiomas ... pero quizás si está usando UTF-8 y el marcador de posición debería ser lo suficiente como para aceptar cualquier cosa. – Prix

Respuesta

9

No hay ninguna razón técnica para no permitir ningún carácter en una contraseña. Supongo que en el caso que describa, solo permitiría que los caracteres alfanuméricos eviten problemas del lado del usuario (por ejemplo, al ingresar un carácter que no está disponible en los teclados de otro país).

Muchos proveedores y sitios obligan a los usuarios a elegir contraseñas muy complejas que contienen un número mínimo de números y, a veces, incluso caracteres especiales para evitar la fuerza bruta o dictionary attacks.

No creo que forzar personas para elegir una contraseña compleja es sabio. Contraseñas que no puede recordar, las anotará en algún lugar, lo que a menudo crea un riesgo de seguridad mucho mayor en la vida real.

Un límite de velocidad simple en el sistema de inicio de sesión (por ejemplo, denegar el acceso durante 15 minutos después de 3 intentos fallidos de inicio de sesión) quita la amenaza de forzar la fuerza mucho más elegante.

Uno no tiene que estar de acuerdo al 100% con él, pero encontré este documento provocativo sobre el tema de Microsoft Research muy interesante. So Long, And No Thanks for the Externalities: The Rational Rejection of Security Advice by Users

Del resumen:

A menudo se sugiere que los usuarios están irremediablemente perezoso y desmotivado las cuestiones de seguridad. Eligen las contraseñas débiles , ignoran las advertencias de seguridad y olvidan a errores de certificados. Argumentamos que el rechazo de los usuarios de las recomendaciones de seguridad que reciben es completamente racional desde una perspectiva económica. El consejo ofrece a protegerlos de los costos directos de los ataques, pero les carga con costos indirectos mucho mayores en forma de esfuerzo.

+3

+1 para no forzar. =) –

+5

+1 sin restricciones. Desconfío de los sitios que sienten la necesidad de restringir mi contraseña; me pregunto por qué sienten la necesidad de restringirla y cómo la almacenan. – Mike

+4

Escribir su contraseña compleja no es tanto un riesgo de seguridad como no anotar su contraseña débil o "fácil de adivinar". La mayoría de los ataques se realizan de forma remota. Si las personas tienen acceso a su escritorio donde está su contraseña anotada, también es probable que tengan acceso físico a su computadora con cookies que lo mantendrán conectado. Eso es a menos que encripte su disco duro, pero no conozco ninguno. -geek que hace eso. No creo que un sistema de bloqueo sea una buena idea. Será muy fácil hacer una DoS contra sus usuarios. Todo lo que tengo que hacer es realizar algunos intentos fallidos en su cuenta para bloquearlo. –

2

¿Por qué le gustaría limitar los caracteres de una contraseña? Deberías estar haciendo algún tipo de hashing de todos modos. Mis contraseñas contienen con frecuencia símbolos especiales, incluidos los que no están incluidos en el teclado.

Si desea limitaciones, solo debe exigir que sean más complejas, no menos.

+2

"símbolos especiales, incluidos los que no están incluidos en el teclado", como qué? –

+1

en la mayoría del teclado, esas letras no aparecen: æøå –

+1

@Alix Axel: Caracteres unicode aleatorios o cosas con chr (c)> 127. Mi contraseña es larga y se genera aleatoriamente. Están almacenados en una base de datos encriptada en mi computadora (KeePassX específicamente). –

2

Lo único que no puedo permitir/eliminar en las contraseñas es el espacio en blanco, no hay ninguna razón para forjar algo más.

+3

Mm, yo diría que depende de la audiencia objetivo del servicio que está ofreciendo. Si son viajeros, sería cauteloso. Digamos que está de vacaciones en un país donde sus Umlauts locales ('äöüß' en mi caso) no están disponibles en el teclado. La mayoría de las personas no conocen los códigos Alt + xyz para obtenerlos. No es su culpa que eligieron la contraseña incorrecta en ese caso, pero puede ser bueno para todos evitarla. –

+3

En Portugal no usamos Umlauts para ninguna palabra pero todos los teclados cömë con ella. Aún así, las personas no son estúpidas, si eligen una contraseña con Umlauts, deben saber cómo obtenerla (tal vez mediante un teclado en pantalla o un mapa de caracteres). Odio los sitios web que restringen las contraseñas a los alfa-num-guiones, se podría estudiar un juego de caracteres más grande y más internacionalizado, pero dudo que sea aceptado/recordado por todos. –

+2

¡Interesante sobre el diseño del teclado portugués! Aún así, hay tantas diéresis que no están disponibles en otros lugares. Puedo ver fácilmente que un usuario alemán elige una contraseña que contenga 'ß' y luego no puede iniciar sesión en su correo electrónico en el cibercafé de Mallorca. La mayoría de los usuarios no saben cómo obtener el mapa de caracteres: el sitio debería proporcionar un teclado para el inicio de sesión ... Estoy de acuerdo con usted, aunque limitar la duración y no permitir mayúsculas es simplemente estúpido. –

2

Cuando entro contraseñas, que normalmente gusta escribir frases más largas que puedo recordar en lugar de p" % &/k1 o similares.

Así que asegúrese de que permite a los usuarios escribir contraseñas de más de 10signs. Siempre me frustra, cuando me veo forzado a ingresar una contraseña corta con caracteres especiales en lugar de una más larga que sería más memorable y más segura.

+3

No lo creerá, pero uno de los principales ISP en mi país restringe las contraseñas a 6 a 8 caracteres 0-9a-z. Ni siquiera permiten mayúsculas, me deja boquiabierto su estupidez. –

0

Solo rechazo los caracteres que no se pueden escribir en un teclado estándar. No hay ninguna razón por la que un usuario no pueda elegir una contraseña segura con 26 letras mayúsculas y minúsculas, 10 números y 20 símbolos.

Si está haciendo un sistema de inicio de sesión para un sitio público, en lugar de forzar a los usuarios a elegir una contraseña segura, recomendaría usar OpenID. De esta forma, el usuario no necesita recordar una nueva contraseña difícil de recordar solo para su sitio.

0

No te metas con la contraseña del usuario.

Solo asegúrese de estar utilizando una codificación y reglas consistentes en todas las etapas del manejo de su contraseña. En su caso, la codificación no debería ser un problema ya que está almacenando sales.

Como ejemplos, he venido con reglas estúpidas como contraseñas de 4 dígitos (!!!), solo caracteres alfabéticos (az) y un sitio web académico que trunca silenciosamente las contraseñas de 10 caracteres en el registro y falla cuando Intentó iniciar sesión con la contraseña larga.

+0

¿cómo terminé respondiendo una pregunta de hace una semana con una respuesta ya aceptada? – asr

0

Me encontré con esta pregunta mientras hacía una investigación y pensé que tenía que contribuir.

En realidad, creo que las contraseñas deben no aceptar cualquier carácter. El problema puede venir con caracteres que no son parte de la tabla ASCII estándar.

Tomemos, por ejemplo, la letra ü (u minúscula con diéresis):

  • En el ASCII extendido, que el carácter es 0x81.
  • En ISO-8859-1 (muy común en los países occidentales) es 0xFC.
  • En UTF-8 ü tiene el punto de código U + 00FC, y por lo tanto se puede representar como 0xC3BC
  • En UTF-8 El personaje también puede ser no normalizada, sin embargo. Por lo tanto, podría estar compuesto por el carácter umlaut (solo el ¨) más el u: el resultado es otra secuencia diferente de bytes.

En todos los casos anteriores, el hash para la contraseña será diferente y el inicio de sesión fallará.

Una posible solución para permitir que cualquier carácter Unicode todavía es asegurar que toda la página utiliza UTF-8 en todas partes, y normalizar las contraseñas (por ejemplo con el modo NFC) antes de hash ellos.
Sin embargo, en este punto puede ser más fácil rechazar cualquier carácter que no forme parte de la tabla ASCII estándar: bytes 0x00-0x7F o (aún mejor, eliminar caracteres de control y otros no representables más líneas nuevas) 0x20-0x7E.

Cuestiones relacionadas