¿Por qué la mayoría de los sitios web no especifican si el nombre de usuario o la contraseña son incorrectos?

Dos razones:

1) la seguridad es la razón principal: indica que el nombre de usuario es correcto pero que la contraseña no permite que los piratas informáticos ajusten mejor sus ataques una vez que se encuentra un nombre de usuario válido. Si no indica ninguno, técnicamente puede pensar en el nombre de usuario y la contraseña como una contraseña más larga que es única en todo el sistema, y ​​las contraseñas más largas son más difíciles de descifrar.

2) Pereza: una forma común de autenticar es verificar una base de datos con una simple declaración SQL, y si falla la búsqueda de nombre de usuario o contraseña, la base de datos simplemente devuelve 0 filas. Lo que significa que no tengo más información sobre qué parte no coincidió sin escribir código adicional, algo que dado el número 1 es poco probable que haga.

Alternativamente, si me estoy autenticando contra un sistema de terceros, estoy en la misma situación: ese sistema no me dice cuál está mal y, por lo tanto, no puedo transmitirlo al usuario final.

En realidad, eso se puede clasificar como fuga de información para el sitio web. Si reviso y ejecuto un ataque de fuerza bruta en la página de inicio de sesión y analizo la diferencia en las respuestas del sitio web, podría enumerar nombres de usuario válidos. En ese momento, es una cuestión de matemática lo fácil que será crear contraseñas válidas por fuerza bruta ahora que tengo una lista de nombres de usuario válidos. El vago mensaje de error es no permitir ataques de fuerza bruta en el campo de nombre de usuario para aumentar la dificultad de ese problema matemático, con suerte hasta el punto en que un atacante no considere que valga la pena.

Si bien la respuesta de John es técnicamente correcta, podría valer la pena preguntarse si la institución de “insinuaciones progresivas” en algunos sistemas podría ser realmente valiosa. Por ejemplo, muchos sistemas tienen autenticación únicamente para establecer la identidad del usuario y no para proteger nada (al menos nada que no pueda repararse fácilmente en caso de abuso). También es muy común que solo se pueda acceder a los sistemas una vez que se haya realizado la autenticación LAN. En ese caso, no veo ningún problema al decir algo como ‘Esa contraseña es incorrecta’, ‘su contraseña era demasiado corta’ o ‘su nombre de usuario no tiene esa contraseña’ u otra pista que pueda recordarle al usuario qué pasa. Eso sí, tales sistemas no deberían usar autenticación, o deberían obtenerla de un proxy como un PDC. ¡Solo han pasado unos 30 años desde que se inventó LDAP, después de todo!

De cualquier manera, creo que las respuestas automáticas sobre seguridad han contribuido en gran medida a la experiencia de autenticación de los usuarios en la web y en otros lugares en general y, en mi opinión, su pobre seguridad general como consecuencia. Pero eso es controvertido, lo sé.