sessions requests close auth python session

close - requests python sessions



Identificación de sesión única en python (5)

¿Cómo puedo generar una identificación de sesión única en Python?



Puede ser tan simple como crear un número aleatorio. Por supuesto, tendría que almacenar sus ID de sesión en una base de datos o algo así y verificar cada uno que genere para asegurarse de que no sea un duplicado, pero las probabilidades son que nunca lo serán si los números son lo suficientemente grandes.



ACTUALIZACIÓN: 2016-12-21

Mucho ha sucedido en los últimos ~ 5 años. /dev/urandom se ha actualizado y ahora se considera una fuente de aleatoriedad de alta entropía en kernels y distribuciones Linux modernos. En los últimos 6mo hemos visto la inanición de la entropía en un kernel Linux 3.19 usando Ubuntu, así que no creo que este problema esté "resuelto", pero es suficientemente difícil terminar con aleatoriedad de baja entropía cuando se pregunta por cualquier cantidad de aleatoriedad. del sistema operativo.

Odio decir esto, pero ninguna de las otras soluciones publicadas aquí es correcta con respecto a ser una "identificación de sesión segura".

# pip install M2Crypto import base64, M2Crypto def generate_session_id(num_bytes = 16): return base64.b64encode(M2Crypto.m2.rand_bytes(num_bytes))

Ni uuid() ni os.urandom() son buenas opciones para generar ID de sesión. Ambos pueden generar resultados aleatorios , pero al azar no significa que sea seguro debido a una entropía pobre. Consulte " Cómo crackear un generador congruente lineal " a través de los recursos de Haldir o NIST en Generación de números aleatorios . Si aún desea usar un UUID, utilice un UUID que se generó con un buen número inicial aleatorio:

import uuid, M2Crypto uuid.UUID(bytes = M2Crypto.m2.rand_bytes(num_bytes))) # UUID(''5e85edc4-7078-d214-e773-f8caae16fe6c'')

o:

# pip install pyOpenSSL import uuid, OpenSSL uuid.UUID(bytes = OpenSSL.rand.bytes(16)) # UUID(''c9bf635f-b0cc-d278-a2c5-01eaae654461'')

M2Crypto es la mejor API de OpenSSL en Python atm, ya que pyOpenSSL parece mantenerse solo para admitir aplicaciones heredadas.


import os, base64 def generate_session(): return base64.b64encode(os.urandom(16))