¿Es seguro usar la sesión para verificar si el usuario está conectado?

2

Busqué "cómo comprobar si el usuario está conectado" y la mayoría de las respuestas que encontré (en Stack Overflow) son para usar sesiones de PHP. Mis preguntas son:

  1. ¿Debo confiar únicamente en las sesiones de PHP para verificar si el usuario está conectado?
  2. ¿Debo usar la base de datos únicamente cada vez que compruebo si el usuario ha iniciado sesión? (Esto es lo que estoy usando en este momento).
  3. ¿Debo usar ambos?

¿Hay alguna vulnerabilidad / ataque que deba tener en cuenta?

    
pregunta Dumb Question 14.12.2016 - 06:14
fuente

3 respuestas

2

Una sesión es algo que se usa para que el usuario no ingrese la contraseña en cada solicitud. Almacena todos los datos que necesita sobre el usuario (por ejemplo, si ha iniciado sesión, con qué nombre de usuario, etc.) en el servidor en algún tipo de tabla de búsqueda. Luego pasa la ID que necesita para consultar la información al usuario, de modo que ella pueda usarla para la autenticación sin contraseña en el futuro.

Hay muchas maneras de implementar esto. Todas las implementaciones necesitan una tabla de búsqueda (para almacenar los datos), un generador de ID de sesión aleatorio y una cookie o alguna otra forma de pasar la ID entre el usuario y el cliente.

PHP viene con una implementación fuera de la caja. Si utiliza funciones de sesión de PHP PHP se encargará de generar la ID, configurar y leer las cookies. y buscar los datos de la sesión (que PHP guarda en archivos en el disco) para usted. No tienes que preocuparte por estas cosas.

Por supuesto, puede escribir su propia implementación, utilizando una base de datos como tabla de búsqueda. Sin embargo, hay muchas cosas difíciles sobre la implementación y, a menos que sepa lo que está haciendo, es fácil cometer errores sutiles que harán que su sistema sea inseguro. Por lo tanto, le recomendaría que simplemente vaya con la solución que PHP ya le proporcionó.

Finalmente, no hay necesidad de usar ambas sesiones de PHP y solo para verificar que el usuario haya iniciado sesión. Una es suficiente y agregar otra no le brinda ningún beneficio de seguridad. (Podría, por supuesto, usar la base de datos para buscar información sobre el usuario que inició sesión, como el nombre de usuario y el correo electrónico, pero eso es otro asunto).

    
respondido por el Anders 14.12.2016 - 12:45
fuente
3

¿Cuál sería tu plan de otra manera? Las sesiones son simplemente una forma de indicar que un usuario se ha autenticado con éxito recientemente, por lo que no tiene que seguir pidiéndoles su contraseña en cada solicitud.

Usted pregunta si también debe verificar la base de datos. Si no está revisando la base de datos, ¿cómo está verificando que el token de sesión provisto es válido?

El ataque más común contra las sesiones es robo de sesiones . Las medidas preventivas más comunes son https en cada conexión que incluye una sesión y caducan automáticamente las sesiones (lo ideal sería que las sesiones robadas solo sean útiles por un tiempo limitado).     

respondido por el Xiong Chiamiov 14.12.2016 - 06:28
fuente
-1
  1. solo ID de sesión, caso 1

Si solo confía en la sesión para verificar si el usuario ha iniciado sesión o no, entonces debería considerar verificar el ID de sesión en cada paso durante y después del inicio de sesión, ya que existe la posibilidad de un secuestro de sesión con puede ser posible que un atacante cambie el ID de sesión del usuario actual con otra persona.

  1. única base de datos, caso 2

No debe considerar esta opción, ya que ralentizará el rendimiento del portal si comprueba cada vez si el usuario correcto ha iniciado sesión o no.

  1. sesión y base de datos, caso 3

Vaya siempre con esta opción, ya que no tiene que ir a través de la base de datos cada vez y asegúrese de verificar si el session_id correcto ha iniciado sesión o no, y siempre intente cifrar este ID de sesión, ya que también hay una posibilidad para que el atacante realice ataque de reproducción si no verificará si la tarea se está repitiendo o no.

    
respondido por el kandpal 14.12.2016 - 06:39
fuente

Lea otras preguntas en las etiquetas