usuarios usuario usando tipos sistema sesiones seguro para múltiples manejo control con completo autentificación autenticación administrador php mysql session cookies

usuario - manejo de sesiones en php



¿Cuál es la forma correcta y segura de mantener a un usuario conectado? ¿galletas? ¿sesión? PHP && MYSQL (5)

Como @Madara dijo que nada es 100% seguro y correcto, pero como punto de vista del desarrollador, diría que todos y cada uno de los métodos para retener los datos de sesión del usuario tienen sus propias ventajas y desventajas, por ejemplo.

Datos de usuario en cookies vs sesión

Si mantiene los datos de la sesión del usuario en cookies, consumirá menos memoria RAM y procesará porque no tiene que mantener la información del usuario registrado en la RAM. también si el usuario aumenta, se recomienda mantener los datos de sesión del usuario en cookies en lugar de en sesión, ya que mantener la sesión consumiría recursos del servidor y su aplicación podría ser más lenta y no responder en algún momento. donde, como si usted mantiene a los usuarios que han iniciado sesión en los datos en la sesión Sería seguro que las cookies pero consumiría más recursos del servidor.

Nota final: ambas formas son correctas en su propia implementación también si su aplicación utiliza el protocolo HTTPS, entonces la seguridad no debería ser una preocupación. por lo que sugeriría utilizar métodos para retener los datos de sesión del usuario de acuerdo con los requisitos de la aplicación y del modelo de negocio.

Más tarde, pregunté cómo cerrar la sesión correctamente a un usuario, ahora veo que usar solo cookies para mantener un usuario conectado no es seguro en absoluto.

Mantener la contraseña en una cookie no es un método seguro para hacerlo, por lo que mi pregunta es: ¿Cuál es la forma correcta de hacer (iniciar sesión / mantener al usuario conectado) en mi sitio web?

Actualmente guardo la ID de usuario que es la misma que la URL necesita para mostrar el perfil de usuario de X, y el correo electrónico y la contraseña cifrados en MD5.

Setcookie es la única función que utilizo cuando un inicio de sesión correcto. Solo uso sesiones para almacenar números aleatorios para evitar envíos repetidos de formularios. campos ocultos

• ¿Me puede mostrar cómo es la forma correcta y segura de hacerlo?
• ¿Cuál es tu forma de hacerlo?

Sólo PHP Dos meses en php, todos aprendimos de tus respuestas. Gracias


La mejor práctica es usar sesiones de PHP.

Una sesión de PHP se mantiene al hacer que el navegador devuelva una cadena criptográficamente segura (es decir, no se puede adivinar el siguiente valor válido) conocida como ID de sesión cada vez que realiza una solicitud durante esa sesión. La mejor y más segura manera de hacerlo es darle al navegador una cookie de sesión , que luego enviará con cada solicitud.

El método alternativo para usar una cookie de sesión es incluir el ID de sesión de PHP en la URL de la solicitud como una variable GET. Un ejemplo de URL podría verse como:

https://www.example.com/mypage.php?PHPSESSID=cteekbf64igp5vdjjkktvoeb97

Esto no es tan seguro como usar una cookie, ya que la URL podría accidentalmente ser compartida o robada por otros medios.

La seguridad tiene muchas capas, como una cebolla (como se ve en el ejemplo común). Cuanto más seguro hagas algo, más esfuerzo se requiere para hacerlo seguro y menos conveniente es utilizarlo. Es una compensación costo-beneficio. Entonces, tiene que preguntar qué tan importantes son sus datos, la privacidad y seguridad de sus usuarios, etc.

Para mí, un nivel básico sería utilizar sesiones de PHP con el ID de sesión forzado a estar en cookies (bloquear a los usuarios que deshabilitan las cookies), encriptación SSL todo el tiempo, tanto en los datos como en las cookies, y asegurarse de las diversas configuraciones de PHP que La seguridad de los efectos para las sesiones se establece en la mejor y más segura configuración. Querrás leer todo en estas páginas y páginas secundarias:


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 utilizar cookies, pero las cookies están muy expuestas y se modifican fácilmente. Nunca almacene datos privados, o niveles de acceso en una cookie. Como es fácilmente robado / modificado por un atacante.

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

¿Entonces lo que hay que hacer? Las sesiones son seguras en la mayoría de los casos. Recomiende 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 necesito eso:

userid=12345 hash=$userid . $password . $user_specific_random_pregenerated_salt

Luego tengo algo con lo que hacer coincidir, y los detalles del usuario no fueron revelados.

Pero como dije, al final del día, si realmente REALMENTE deseaba proteger a sus usuarios, y antes de todo lo demás en esta respuesta, consiga HTTPS.


Si una persona tiene un nombre de usuario y una contraseña, esto se puede configurar como una cookie en su navegador para que no tengan que volver a iniciar sesión en su sitio web cada vez que lo visitan. Puede almacenar casi cualquier cosa en una cookie del navegador. El problema es que un usuario puede bloquear las cookies o eliminarlas en cualquier momento. Si, por ejemplo, el carrito de la compra de su sitio web utilizaba cookies, y una persona tenía configurado su navegador para bloquearlas, entonces no podría comprar en su sitio web.

Cuando almacena datos en cookies, debe estar absolutamente seguro de que los usuarios no pueden manipular los datos de ninguna manera. No hay forma de evitar que los usuarios alteren los datos en una cookie; es absurdamente fácil Por lo tanto, para asegurarse de que su sitio web no acepte cookies que contengan datos alterados, debe cifrar los valores de las cookies o firmarlas con un hash que le permita verificar su integridad.


Yo usaría una sesión.

Para ayudar un poco en la seguridad, una vez que se hayan verificado las credenciales de los usuarios, use session_regenerate_id , ya que la identificación de la sesión es lo que se transmite en una cookie, esto es importante si alguien está husmeando mientras se inicia sesión.

NO GUARDE ninguna información en la sesión relacionada con las credenciales de acceso: un ID de usuario a menudo es suficiente; personalmente construyo un objeto de usuario que almaceno en la sesión (estos se auto serializan / no serializan entre solicitudes, pero se pueden leer en forma independiente).

SI desea configurar una cookie para que el usuario no tenga que iniciar sesión en la próxima visita, tal vez almacene el ID de usuario y un token generado automáticamente que se pueda verificar en la base de datos (o similar). También agregaría extras a la verificación. como almacenar la última dirección de correo electrónico con el token para verificar también, si no coinciden, solicite el inicio de sesión una vez más.

Hay bastantes enfoques que se pueden tomar (no ofrezco todos / ''los mejores'' '', haga que su código sea revisado por personas en una comunidad de PHP). Puede aprender más de esa manera.