2010-06-21 6 views
5

Estoy creando un sistema de inicio de sesión en PHP, y quiero saber cómo proteger mejor la cadena de información del usuario en mi cookie. Estaba pensando en encriptar la cadena con una clave de alguna manera? Es esta la mejor manera? Soy un poco nuevo en esto.¿Cuál es el mejor método para proteger los datos de cookies de inicio de sesión en PHP?

Gracias de antemano.

+6

¿Contra qué desea protegerlo? –

+0

Personas que podrían tratar de leer fácilmente la cookie para información del usuario ... – mattsven

+1

Por lo tanto, desea proteger la confidencialidad de sus datos (no puede ser leído por terceros) y no la integridad de sus datos (los cambios de los datos serán ser detectado), ¿verdad? – Gumbo

Respuesta

23

No almacene información confidencial en las cookies. Almacene un hash de ID de sesión para conectar el usuario que ha iniciado sesión con su cuenta.

+2

Y marque el indicador de seguridad de la cookie si usa HTTPS y HTTPOnly en verdadero. – Tower

0

Si absolutamente DEBE almacenar información en una cookie en lugar de la sesión del usuario, considere firmarla con HMAC. La función hash_hmac está integrada en las versiones modernas de PHP.

Si está almacenando un inicio de sesión de usuario para una función de "recordarme", almacene el ID del usuario y un hash de información que solo está disponible en su base de datos. Por ejemplo, juntar el nombre de usuario y la contraseña y almacenarlo con la identificación del usuario en la cookie es razonablemente seguro. Si el usuario alguna vez cambia su contraseña, todas las máquinas con las que inició sesión con ese método se invalidarán, y no hay forma de simplemente cambiar la ID en la cookie y aún iniciar sesión, porque el hash de nombre de usuario/contraseña no coincidirá. .

+1

¿Cómo descifrar la salida? ¿O es unidireccional? – DrColossos

+0

HMAC es una función hash, no hay descifrado porque no hay cifrado. Es un mecanismo de detección de manipulación. Además, tengo curiosidad por saber por qué estaba rechazado. – Charles

+0

El OP desea almacenar datos en una cookie y luego recuperarlos más tarde. Una función hashing de una manera no es la respuesta. Si desea utilizar el cifrado, puede usar una de las funciones de encriptación, pero hay formas mucho mejores. – TheLQ

2

Nunca debe almacenar información segura en una cookie. Las cookies se guardan en textformat en el ordenador del usuario, y hay muchas razones por las que nunca se debe almacenar informaciones sensibles en ellos:

  1. cookies son básicamente archivos de texto que se pueden abrir por cualquier persona en el ordenador, con cualquier texto editor.
  2. Las cookies se almacenan en la computadora del usuario, esto significa que no tiene límite de tiempo, no hay límite de conexión, no hay límite de procesamiento, por lo que puede intentar forzar cualquier dato tanto como quiera sin preocuparse de que se bloquee la IP/pateado ...

Solo debe almacenar cosas como un nombre de usuario para recordar o una identificación de sesión.

+1

Y las cookies se pueden inyectar e inspeccionar a través del cable. – strager

4

Aaron Harun tiene la respuesta correcta para usted. Básicamente, no es necesario encriptar dichos datos siempre que los almacene en una sesión, porque esos datos nunca llegan al cliente/navegador/usuario, ya que todo es del lado del servidor. Cuando crea una sesión en PHP, maneja las cookies para usted, por lo que no tiene que preocuparse por eso. En la mayoría de los casos, no es necesario tratar con las cookies. En seguridad, lidiar con las cookies es perjudicial.

He visto algunos sitios descuidados que en realidad almacenan el nombre de usuario en un campo oculto en un formulario, que permite a cualquiera simplemente editar su copia local de ese formulario y tomar medidas como el usuario que quiera. Esto parece un problema obvio, pero las cookies no son mejores.

Si realmente cree que es una buena idea diseñar un sistema de autenticación casera, primero debe diseñar la base de datos. No almacene contraseñas de texto plano, almacene un hash en su lugar (como md5, sha-1, etc.) y en ese punto no hay daño en generar una sal para cada contraseña (una cadena aleatoria que agregue a la contraseña del usuario antes de hash, y almacene esa sal con el hash de contraseña porque lo necesitará más adelante; esto previene ataques de hash de diccionario, es decir, tablas de arcoiris).

+0

+1 para el detalle adicional –

0

¡Obtienes sesiones gratis! Es el lado del servidor de datos almacenados, manejado automáticamente por PHP/framework-of-your-choice. Simplemente coloque datos en la sesión, que está asociada a un UID aleatorio almacenado en las sesiones de los clientes. Del lado de los clientes, esta es la cookie de sesión. Esta ID se genera automáticamente, puede ajustar el comportamiento manually.

El lado del cliente almacenado de datos nunca es seguro, no hay encriptación real disponible. Las sesiones que necesitará de todos modos para realizar un seguimiento de los usuarios que han iniciado sesión. Si tiene muchos datos, puede usar la ID para identificar los datos asociados de otras áreas de almacenamiento de datos (DB, XML, etc.)

Cuestiones relacionadas