2011-05-06 31 views
12

No estoy exactamente seguro de cómo funciona el $_SESSION en PHP. Supongo que es una cookie en el navegador combinada con una clave única en el servidor. ¿Es posible falsificar eso y mediante el inicio de sesión de pase que solo usa sesiones para identificar al usuario?Falsificación de sesión/Cookies?

Si $_SESSION no funciona así, ¿alguien puede falsificar las cookies y omitir los inicios de sesión?

Respuesta

19

Sí.

Lo único que identifica a un usuario es un valor pseudoaleatorio que se envía junto con cada solicitud. Si un atacante puede adivinar los valores correctos para enviar, puede hacerse pasar por otra persona.

Hay diferentes maneras de hacer esto más difícil:

  • identificadores de sesión de maquillaje más largo (más entropía, más difícil de adivinar)
  • cheque información adicional como el agente de usuario (en esencia, más entropía)
  • , obviamente, : utilice un generador de números aleatorios bueno
  • expire las sesiones antes para proporcionar un conjunto más pequeño de identificadores de sesión válidos en cualquier momento
  • renueve los identificadores de sesión a menudo, incluso para identificadores válidos
  • uso de SSL para cifrar todas las comunicaciones para evitar de plano de galletas secuestro
+1

+1 buena lista :) – alex

6

Sesiones en PHP de almacenamiento por defecto los datos en un archivo en el servidor (/tmp /) y almacenar una cookie de identificador general PHPSESSID (que será un número hexadecimal, por ejemplo f00f8c6e83cf2b9fe5a30878de8c3741).

Si tiene el identificador de otra persona, entonces en teoría podría usar su sesión.

Sin embargo, la mayoría de los sitios comprueban para asegurarse de que el agente de usuario sea coherente y también regeneran el identificador de sesión cada puñado de solicitudes para mitigar esto.

En cuanto a adivinar una sesión, es posible, pero extremadamente improbable. Sería más fácil adivinar los números de tarjetas de crédito (un grupo más pequeño de caracteres (0-9 sobre 0-9a-f) y una suma de comprobación para validarlo). Aunque, por supuesto, también necesitaría el código de caducidad y seguridad.

+0

Cualquier idea por ser demasiado sólo la creación de las galletas? – Pwnna

+0

@ultimatebuster No estoy seguro de lo que quieres decir, lo siento. – alex

+0

En lugar de usar $ _SESSION para identificar, me refiero al uso de cookies para identificar. – Pwnna

1

Correctamente implementados, los identificadores de sesión son muy largos y aleatorios para hacer inviables las conjeturas (aunque si pudieras adivinar el ID de sesión de un usuario en particular, entonces sí estarías actuando como ese usuario). Sin embargo, puede oler y secuestrar sesiones: esto es lo que hace fireheep: http://en.wikipedia.org/wiki/Firesheep

+0

eek. esto me dio un susto muy duro. Tendré más cuidado con lo que escupí sobre las cookies y las sesiones a partir de ahora. – Partack

Cuestiones relacionadas