¿Es seguro almacenar la contraseña en una sesión de PHP?

8

Necesito hacer algunos cifrados en la zona privada de mi sitio web y quiero bcrypt la contraseña del usuario.

¿Es seguro almacenar la contraseña en la sesión cuando el usuario inicia sesión, para poder usarla más tarde?

    
pregunta Surfer on the fall 21.08.2012 - 16:29
fuente

2 respuestas

10

No almacene la contraseña en las variables de sesión. En su lugar, use una clave sustituta.

Por ejemplo:

  1. Genera una clave aleatoria. Esta es tu clave sustituta.
  2. Use esa clave para cifrar los datos que necesite.
  3. Genere una clave de almacenamiento a partir de su contraseña, utilizando una función de derivación de clave adecuada (por ejemplo, PBKDF2 o bcrypt).
  4. Cifre la clave sustituta con la clave de almacenamiento. Si las dos claves tienen la misma longitud, un xor bit a bit de las dos es una forma ideal de cifrado, ya que es simple y no se puede romper sin conocer una de las claves.
  5. Almacene la clave sustituta encriptada.

Cuando el usuario inicia sesión, haces lo siguiente:

  1. Calcular la clave de almacenamiento a partir de la contraseña.
  2. Use la clave de almacenamiento para descifrar la clave sustituta encriptada.
  3. Almacene la clave sustituta descifrada en su variable de sesión.
  4. Use la clave sustituta para descifrar los datos según sea necesario.
  5. Destruye la clave sustituta descifrada cuando finaliza la sesión.

Si un atacante obtiene acceso de lectura a los datos de sesión almacenados en su directorio /tmp , podrían extraer claves sustitutas. Sin embargo, no podrán acceder a la contraseña del usuario. Si bien esto no protege los datos que está cifrando en el servidor, impide el acceso no autorizado a la cuenta del usuario y evita que el atacante aproveche los casos en que el usuario ha utilizado la misma contraseña en otro lugar.

    
respondido por el Polynomial 21.08.2012 - 17:36
fuente
1

Si desea utilizar PHP de forma segura, debe tener instalado el parche de PHP endurecido Suoshin . (Cualquier empresa de hosting con la que valga la pena tratar ya lo tendrá en sus servidores). Este parche incluye una funcionalidad que encripta los datos de la sesión automáticamente, lo que debería ser suficiente para protegerte de ciertos tipos de ataques.

Pero los hacks de sesión son solo un elemento en la caja de herramientas de un pirata informático, y las contraseñas son un objetivo principal, por lo que no deben tratarse como algo a lo que su programa debe aferrarse (incluso en la memoria) durante cualquier período de tiempo; una contraseña debe estar marcada tan pronto como sea posible después de la entrada y la cadena de la contraseña se borra de inmediato.

Entonces, mi respuesta a tu pregunta sería no, no deberías considerar guardar una contraseña para reutilizarla más tarde.

    
respondido por el SDC 22.08.2012 - 11:54
fuente

Lea otras preguntas en las etiquetas