En PHP, crear una sesión es fácil. Primero lo declara usando session_start()
. Se encarga de crear una cookie de sesión para usted, y casi todas las cosas difíciles. Cuando el usuario navega a través de su sitio, puede leer y escribir en las variables de sesión utilizando el objeto global $_SESSION
, que puede afectar el contenido que desea mostrarle al usuario e incluso cómo se muestra.
Lo que sucede, es que el servidor genera un token aleatorio seguro en su lado y luego envía el valor como una cookie al cliente que el cliente se comunica automáticamente con el servidor en cada solicitud. El servidor toma este valor y lo usa para determinar qué objeto en la memoria debe hacer referencia como el objeto $_SESSION
.
Sin embargo, usted quiere manejar el inicio de sesión inicial, usted no va a entrar en eso aquí. Pero una vez que el usuario inicia sesión, desea indicar eso en el $_SESSION
global. Para hacerlo seguro, querrá destruir cualquier sesión existente y crear una nueva en la autenticación. La forma en que normalmente lo hago es establecer $_SESSION['user']
al iniciar sesión (después de destruir la sesión anterior y crear una nueva). De esa manera tiene otro uso, verificando si un usuario ha iniciado sesión: if(isset($_SESSION['user']))
.
Esta es una funcionalidad básica, pero esperamos que apunte en la dirección correcta. Las bases de datos no son necesarias para las sesiones, a menos que esté intentando implementar políticas de inicio de sesión / sesión o esté ejecutando su sitio web en un clúster. Eso sería debido a una discusión más complicada que no creo que sea apropiada para entrar aquí.
Editar / Actualizar :
Resulta que, de hecho, entraré en los detalles de un sistema de inicio de sesión seguro; Si desea que su sistema de inicio de sesión esté a la altura de los estándares de seguridad, deberá hash (y sal) su contraseña correctamente. Resulta que hay un método PHP para eso también .
Básicamente, el hash convierte lo que sea la entrada en basura que no se puede devolver a la entrada original. El hash de contraseñas se utiliza para evitar que las personas obtengan acceso a la contraseña original en el caso de un compromiso del servidor / base de datos en el que las contraseñas puedan filtrarse. Lo más importante que se debe saber cuando el hash es que los algoritmos más lentos funcionan mejor para las contraseñas.
La salazón es casi tan importante como el algoritmo utilizado para proteger las contraseñas. El salt es un CSPRNG que simplemente se agrega a la contraseña antes del hashing. CSPRNG significa Cryptographically Secure Pseudo Random Number Generator, y es realmente una forma elegante de decir que es un conjunto de bytes súper aleatorio e impredecible. Estos bytes se generan aleatoriamente por contraseña para proteger a los usuarios finales contra ataques de arco iris, en los que se puede verificar un solo hash producido contra grandes cantidades de contraseñas. Al requerir un solo hash por intento por contraseña, reduce en gran medida las posibilidades de una fuga masiva de contraseñas como resultado de una fuga masiva de hash.
Un sistema manual funcionaría como sigue:
Cuando se crea la cuenta de usuario, se inserta una fila en los "usuarios" de la base de datos con el nombre de usuario especificado y la contraseña con hash. La contraseña con hash primero se graba con sal (datos aleatorios agregados a la contraseña), luego se utiliza con un algoritmo de hashing de contraseña lento. La sal se agrega adicionalmente al hash de contraseña antes de insertarse en la base de datos. Opcionalmente, puede almacenar algo para identificar el algoritmo de hash utilizado con él también. Si se siente incómodo al combinar estos valores, también puede almacenarlos como valores de base de datos separados.
Cuando se inicia el proceso de inicio de sesión, la base de datos se consulta en la tabla de 'usuarios' para la fila con la clave 'nombre de usuario' que coincide con el nombre de usuario solicitado. Se tira esa fila que incluye el hash de contraseña. Primero, la sal se quita del hachís. Luego, se agrega la sal a la contraseña que se proporcionó durante la autenticación y todo se procesó utilizando el mismo algoritmo de hash utilizado originalmente. Luego, si el resultado final coincide con el hash almacenado, el usuario puede autenticarse correctamente.
Espero no estar confundiéndote demasiado con mis explicaciones. Ashley Madison aparentemente perdió el memo por completo, así que si no lo entiendes, no te sientas mal. No eres un sitio web multimillonario. La mayoría de los problemas provienen de cuando las personas se encargan de lograr cosas más allá de su conjunto de habilidades. En ese sentido, le recomiendo que utilice las funciones de hashing de contraseñas incorporadas, o al menos de código abierto y públicamente recomendadas siempre que sea posible. Eliminan todas las conjeturas de la ecuación.