sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la forma correcta y segura de mantener a un usuario conectado? ¿galletas? ¿sesión? PHP y MySQL

Primero, déjame decirte esto. Nada es 100% seguro. Nada es hermético, y nada es sagrado. Si está lo suficientemente motivado, un atacante romperá todas las defensas del lado del servidor que pueda poner (a menos que esté usando HTTPS, que es una historia diferente).

Puede usar cookies, pero las cookies están muy expuestas y se modifican fácilmente. Nunca almacene datos privados o niveles de acceso en una cookie. Ya que es fácilmente robado/modificado por un atacante.

Las sesiones tampoco son 100% seguras. El ID de sesión, que utiliza el servidor para identificar al cliente, se envía de una de dos maneras. una variable $_GET (mala) o una cookie (mejor, pero bastante mala). Es decir, si ha iniciado sesión como administrador, a través de una red WiFi no segura, un atacante experto (y por experto me refiero a un pr0 haxx0r que descargó un sniffer HTTP simple) puede robar fácilmente su ID DE SESIÓN. Y aunque no obtenga su contraseña, el servidor identificará erróneamente al atacante como usted y le otorgará cualquier acceso que pueda tener/tuvo.

¿Entonces lo que hay que hacer? Las sesiones son en la mayoría de los casos seguras. Aconseje a sus usuarios que no inicien sesión en una red no segura (autobuses, cibercafés, etc.). Si desea permitir que su autorización de usuario persista en el tiempo, se requiere una cookie. Usualmente uso un sistema de 2 cookies si lo necesito:

userid=12345
hash=password_hash($userid . $hashed_password, PASSWORD_DEFAULT)

Entonces tengo algo con lo que comparar, y los detalles del usuario no fueron revelados.

Pero como dije, al final del día, si realmente REALMENTE desea proteger a sus usuarios, además de todo lo demás escrito en esta respuesta, obtenga HTTPS.