2014-11-04 97 views
1

我试图在python 3上生成一个安全的session_id。如何在python上生成安全session_id?

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

为了更安全起见,请从md5散列切换到可解密的加密。即session_id = decryptable_encryption(key:USER-AGENT,value:timestamp)并写入cookie。它适用于相同的浏览器,但不同的浏览器。

加密IP地址不好。因为它需要一直改变IP地址的移动环境。

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

+0

这真的是一个密码交换的问题,而不是堆栈溢出。 – 2014-11-04 01:33:01

回答

-1

这里是多一个选择 -

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

不应使用来自'random'模块的伪生成器生成会话ID,因为它不安全:[该模块的伪随机生成器不应用于安全目的](https://docs.python .ORG/3 /库/ random.html)。 – SilverlightFox 2014-11-05 11:09:43

0

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

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

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

使用os.urandom()SystemRandom如果你需要一个密码安全的伪随机数发生器。

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

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

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