如何在python上生成安全的session_id?

时间:2014-11-04 01:28:19

标签: python security session python-3.x cookies

我正在尝试在python 3上生成安全的session_id。

首先,我只生成时间戳的md5哈希值(包括微秒),然后通过cookie写入值。但这种方法可能会被劫持。例如,从浏览器A的cookie中提取session_id值,然后将session_id值修改为浏览器B的cookie。它很有效。

为了更安全,请从md5哈希切换到可解密加密。也就是说,session_id = decryptable_encryption(密钥:USER-AGENT,值:timestamp)并写入cookie。它适用于相同的浏览器,但不同的浏览器不适用。

使用IP地址进行加密并不好。因为它需要一致地改变IP地址的移动环境。

更安全地要求session_id,我如何生成它?我想知道生成会话ID的机制。请告诉我。

3 个答案:

答案 0 :(得分:1)

使用UUID4,您可以生成唯一ID并且易于使用。 (转换为字符串以分配给cookie)

>>> from uuid import uuid4
>>> uuid4()
UUID('6f4a1f4d-1315-4e3e-a737-14f005f86b8c')
>>> 

答案 1 :(得分:1)

答案可以在Python文档中找到:

  

如果您需要加密安全的伪随机数生成器,请使用os.urandom()SystemRandom

您的会话ID必须是“加密安全”,否则攻击者可以预测您的应用程序生成的会话ID并在Session Prediction攻击中使用它。

  

会话预测攻击侧重于预测允许攻击者绕过应用程序的身份验证架构的会话ID值。通过分析和理解会话ID生成过程,攻击者可以预测有效的会话ID值并访问应用程序。

os.urandom()SystemRandom会阻止会话ID的可预测性。

答案 2 :(得分:-2)

这是另一个选项 -

import string
import random
length = 30
chars = string.ascii_letters + string.digits
password = ''.join(random.choice(chars) for i in range(length))