Después de publicar this hace un tiempo, decidí crear mi propia capacidad de Registro/Autenticación en PHP. Me encantaría que cualquiera pueda señalar los defectos/oportunidades de mejora, particularmente alrededor de lo que está almacenado en la sesión ...Critique mis esfuerzos de autenticación de PHP
El flujo lógico es:
1 - usuario se registra utilizando el correo electrónico como nombre de usuario, un "sitio nombre "que luego forma parte de cualquier url a la que tendrán acceso y una contraseña de al menos 6 caracteres que deben contener letras y números (sé que esto podría ser más fuerte)
2 - Siempre que el usuario y el sitio sean únicos , Luego almaceno ambos, junto con una cadena (sal) generada aleatoriamente en una fila en la tabla de autenticación en mi base de datos. Luego tomo la contraseña de los usuarios, concateno la sal y almaceno un hash md5 de esta contraseña salada en la misma fila de base de datos
3 - Cuando un usuario inicia sesión, tomo la contraseña que ha ingresado y concateno la sal para ello, crea un hash md5 de eso, y compáralo con lo que he almacenado en la base de datos; si coinciden, el usuario ha ingresado la contraseña correcta y su nombre de usuario está escrito en la sesión
4 - En cada solicitud, utilizo el nombre de usuario almacenado en la sesión para consultar la base de datos y leer el nombre del sitio asociado con este usuario. Luego comparo esto con el nombre del sitio en la url misma, y si coinciden establezco una variable que es accesible para el resto o la secuencia de comandos (no es una variable global, es solo legible por mi controlador que decide si un usuario puede ver una página en particular) si los dos nombres de sitios no concuerdan, el usuario es redirigido de nuevo al inicio de sesión
Mi preocupación es que alguien escriba en la sesión y así pueda acceder a las páginas de personas si conocen el nombre de usuario que firmaron arriba con? ¿Cómo harías para prevenir esto?
Antes de que nadie me acuse de negligencia por la forma en que este es un proyecto personal de aprendizaje, ¡no expongo datos de ningún cliente!
Debe volver a utilizar un marco de autenticación existente siempre que sea posible, porque, en realidad, es complejo. Por ejemplo, eche un vistazo a https://github.com/delight-im/PHP-Auth, que es tanto agnóstico como independiente de la base de datos. – caw