¿Razón para prohibir dígitos como primer carácter en las contraseñas?

12

Cuando me inscribí en un servicio de DHL (servicio de envío de paquetes alemán), tenían la pauta de contraseña más extraña que he visto hasta ahora:

  • Al menos 8 caracteres pero no más de 13.
  • Uso exclusivo de caracteres "válidos". Los caracteres dados no incluían ' o " o ; o \ , que son las cosas que intentaría usar en una inyección SQL primero.
  • Al menos una letra mayúscula y minúscula.
  • Un dígito, pero no al principio .

¿Por qué uno prohibiría un dígito como primer carácter? En un mundo perfecto, saltarían y harían hash de la contraseña utilizando bcrypt o scrypt y todas las restricciones en el límite superior de la entropía podrían eliminarse fácilmente. Al parecer, tienen un sistema de almacenamiento débil como VARCHAR(13) o una mezcla triste de código heredado y administración de culto de carga.

Todavía no puedo entender la regla acerca de que el dígito no aparece al principio de la contraseña. ¿Por qué uno haría eso? Lo único en lo que puedo pensar es que PHP evalúa la expresión "1Test" == 1 como verdadera. De lo contrario, los identificadores en los lenguajes de programación tampoco deben comenzar con un dígito. Quizás este es el origen de los "personajes válidos"?

¿Se puede adivinar qué está haciendo DHL en el backend?

    
pregunta Martin Ueding 19.03.2016 - 20:41
fuente

3 respuestas

4

¿Es posible que lo hayas pensado demasiado y que solo estén tratando de eliminar muchas contraseñas comunes fáciles de adivinar?

    
respondido por el Mike Ounsworth 20.03.2016 - 03:42
fuente
2

Creo que eres muy acertado en tu propio análisis.

El requisito de longitud hace que sea casi seguro que el back-end almacena las contraseñas sin incluirlas. Eso podría significar que al procesar la contraseña en el código, existe el riesgo de que la contraseña se evalúe en algún lugar. Como usted mismo señala, PHP evaluará "1Test" == 1 a true , causando todo tipo de problemas con una contraseña que comienza con un número.

No puedo ver ninguna otra razón, aunque, por supuesto, puede haber cualquier número de casos especiales con el código específico que se ejecuta en el sitio.

Este tipo de requisitos suele ser un signo de almacenamiento y manejo de contraseñas incorrectos.

    
respondido por el Hans Kristian 21.03.2016 - 22:56
fuente
0

Lo único que puedo pensar es lo siguiente. Muchos lenguajes de programación prohíben los números al comienzo de los nombres de variables. Es posible que estén haciendo un nombre de variable a partir de la contraseña. ¡Pero eso sería una opción de back-end muy extraña!

    
respondido por el Brent Kirkpatrick 20.03.2016 - 02:45
fuente

Lea otras preguntas en las etiquetas