Estoy desarrollando un sistema de autenticación y acceso para un nuevo sitio PHP y he estado leyendo sobre los diversos ataques y vulnerabilidades. Sin embargo, es un poco confuso, así que quiero verificar que mi enfoque tenga sentido.Desarrollo de un inicio de sesión seguro de PHP y estrategia de autenticación
que planea almacenar los siguientes datos:
En la sesión: identificación de usuario, hash + salada
HTTP_USER_AGENT
en la cookie y en la base de datos: testigo aleatorio , hashed + salado identificador
En cada página, I planear en hacer lo siguiente:
Si existe una sesión, la autenticación con eso. Compruebe que el
HTTP_USER_AGENT
coincida con el de la sesión almacenada.Si no existe sesión, use la cookie para autenticar. Compruebe que el token y el identificador en la cookie coinciden con los de la base de datos.
Si la cookie no es válida o no existe, solicite al usuario que inicie sesión.
¿Hay algún defecto obvio en esto? Mientras establezca un tiempo de espera en la cookie, debería estar bastante seguro, ¿verdad? ¿Hay algo que me estoy perdiendo?
Muchas gracias de antemano.
también consideran usar algún sistema de token una vez para acciones críticas ... – TheHippo
Exactamente, almacenar la identificación de la sesión en la base de datos es un error enorme. Al almacenar la identificación de la sesión en la base de datos, hace que la inyección de sql en su sistema sea mucho más valiosa. Debe suponer que su sistema se dividirá, y debe tener un plan de acción para hacer frente a la violación. Es por eso que las contraseñas se almacenan como hashes. Además, más php viene con un manejador de sesión, si vuelves a inventar el wheal te aseguro que será menos seguro. – rook
También hay una gran cantidad de buena lectura: http://stackoverflow.com/questions/549/the-definitive-guide-to-website-authentication-beta#477579 –