¿Debo validar las entradas del formulario de autenticación?

0

Tengo una página de inicio de sesión con un formulario donde pueden ingresar la dirección de correo electrónico y la contraseña de su cuenta.

Estoy haciendo lo siguiente antes incluso intentando autenticar a un usuario:

  • Validación de la dirección de correo electrónico para el formato correcto.

  • Validar la contraseña para no estar vacía.

Si alguno de estos no es válido, informo con los errores de validación como:

  • "No ingresaste una dirección de correo electrónico". y / o "Debe ingresar una contraseña".

También es susceptible a ataques de tiempo ya que no se intenta verificar la contraseña cuando hay errores.

¿Sería más seguro simplemente aceptar cualquier entrada y solo informar con un genérico "Error de inicio de sesión". error?

    
pregunta Kid Diamond 26.09.2014 - 12:30
fuente

2 respuestas

1

Lo siento, no entiendo la parte de tu preocupación con los ataques de tiempo. Siempre que las contraseñas estén correctamente hasheadas y la comparación se realice en los hashes, su aplicación debe estar a salvo de este tipo de ataque de canal lateral. Si se realizó o no una llamada a la base de datos (2s vs 1s) no se filtra ninguna información sobre su contraseña.

Siempre es bueno validar las entradas de formulario, independientemente de si están almacenadas en la base de datos, en caso de que su consulta de base de datos sea susceptible a una inyección de SQL. Esta estrategia se conoce como defensa en profundidad . Nunca se sabe cuando su analizador de consultas se vuelve vulnerable por alguna entrada de usuario extraña como la reciente vulnerabilidad de Shellshock.

Realmente no hay mucho problema de seguridad, ya sea que informe el inicio de sesión fallido al mostrar errores individuales o al agruparlos. Lo que un atacante puede obtener de aquí (si una dirección de correo electrónico es válida) también se puede extraer de la página de registro al intentar registrarse con esa dirección de correo electrónico.

    
respondido por el Question Overflow 26.09.2014 - 13:24
fuente
0

La validación del formato de la dirección de correo electrónico o el campo de contraseña para estar vacío se puede hacer en el lado del cliente y no produce un ataque de tiempo, ya que no se realiza ninguna comparación con el hash real de la contraseña (o contraseña) que se almacena en el lado del servidor.

El ataque de tiempo ocurre si la operación de comparación no se implementa correctamente.

Consideremos un escenario donde, Conjetura del atacante="12345678" Contraseña real="contraseña"

Al enviar la contraseña adivinada, el servidor debe completar la verificación y no devolver el resultado después de la primera falta de coincidencia. En el caso anterior, la primera falta de coincidencia es el primer carácter en sí mismo desde 1! = P. Si el servidor informa de este resultado, el atacante se entera de que la contraseña adivinada era completamente incorrecta. El servidor debe comparar cada letra de la contraseña adivinada con la contraseña actual y devolver el resultado. En el escenario anterior, se deben comparar los 8 caracteres y, finalmente, se debe notificar al atacante el nombre de usuario o la contraseña no válidos.

    
respondido por el Curious 26.09.2014 - 12:47
fuente

Lea otras preguntas en las etiquetas