Mi opinión es que la política existe para todos los campos ingresados por el usuario y la misma política de entrada del usuario (sin caracteres especiales) se aplicó a los campos, incluidas las contraseñas, para simplificar. O, en algún momento, algún banco no tenía contraseñas de hash y tuvo un ataque de SQLi a través de su campo de contraseña, y se decidió una política que las contraseñas no pueden tener caracteres especiales (y se olvidó el motivo de la política una vez que se introdujo el hashing). / p>
Definitivamente, existe un beneficio de seguridad al no permitir caracteres especiales en otros campos ingresados por el usuario que no están hash y pueden usarse para varios ataques como SQLi o XSS (en un administrador de un banco que mira una cuenta). Sin embargo, estas amenazas generalmente se resuelven utilizando siempre parámetros enlazados en SQL y siempre limpiando la entrada del usuario antes de mostrar / guardar en db.
Mi otra conjetura es que quieren tener reglas personalizadas que puedan ser diferentes a las de otros lugares, por lo que no puede reutilizar fácilmente su contraseña segura estándar (que puede perderse), y tiene que encontrar algo único para su sitio.
EDITAR: Pensándolo mejor, dependiendo del idioma, puedo pensar en al menos tres caracteres ASCII especiales que deberían estar universalmente prohibidos / eliminados, ya que permitirlos solo tienta al destino. Específicamente: \r
(null - ascii 0), ya que se usa habitualmente para indicar el final de la cadena en los lenguajes de estilo C (posiblemente los usuarios deben modificar la memoria después del final de la cadena). También los retornos de carro y los avances de línea \n
(ascii 13) y \r\n
(ascii 10), ya que estos son a menudo dependientes del sistema si los saltos de línea son \n
o ,./<>?;':"[]{}\|!@#$%^&*(-=_+
y eso hace inevitable que solo puedo iniciar sesión Desde Windows no es mi maquina / linux. De hecho, parece bastante razonable permitir solo ascii imprimible (32-126) y prohibir el ASCII no imprimible 0-31 y 127.
Pero si por caracteres especiales te refieres a caracteres Unicode, no a ASCII (como 2b 41 38 41 2d
, parece razonable que la implementación de múltiples sistemas operativos / teclados / navegadores no permita caracteres especiales. Imagina que tu contraseña tiene una letra minúscula). Era que el pi griego (π) que es el punto de código 0x3c0 o el pi copiado en minúscula (tic) que es el punto de código 0x2ca1: solo funcionará uno y este tipo de problema de caracteres similares con diferentes puntos de código existirá en Unicode. en bits no podrá igualar los dos π, por lo que si intenta iniciar sesión en diferentes lugares, puede ingresar diferentes caracteres.
De manera similar, aunque este problema es uno que el programador puede controlar e intentar hacer en gran medida, permitiendo que los caracteres Unicode creen problemas de codificación. Es decir, para sus caracteres ascii básicos, todo está representado en un número de un byte. Sin embargo, hay un montón de diferentes esquemas para codificar Unicode. Es UTF-7, UTF-8, UTF-16, UTF-32, Latin-1 (iso-8859-1), codificación Latin-N, y (para algunas codificaciones) cuál es el orden de los bytes (endian o little endian) ? El punto de código Unicode para pi (0x3c0) se representaría como bytes CF 80
en UTF-7, FF FE c0 03
en UTF-8, FF FE 00 00 c0 03 00 00
en UTF-16 y A1
en UTF-32. No podría representar pi en Latín-1 (solo tiene 95 caracteres imprimibles adicionales), pero si tenía un ¡ĄĦЁ‘ก”Ḃ
en su contraseña y estaba en diferentes codificaciones, es posible que tenga que representarlo de cualquiera de los siguientes caracteres %code% (que en algunos Latin-N pueden estar a A1).
Sí, la página web puede tener un conjunto de caracteres definido, pero los usuarios pueden anular el conjunto de caracteres en una página en su navegador o pueden copiar y pegar datos de otros lugares en una codificación diferente. Al final del día, puede ser más simple simplemente prohibir esos caracteres.