【发布时间】:2013-08-16 08:50:23
【问题描述】:
我正在使用 Python 和 Flask 创建一个网站,并且想知道一些对我来说相当重要的事情。
过去,作为未受过教育的程序员,我总是在会话中保存未加密的用户密码,以便可以根据要求重新验证用户名和密码。目前我正在制作我的第一个严肃网站,所以我也想做得更好。
我知道有一些方法可以嗅探会话变量,例如通过一种或另一种方式获取另一个人的会话 ID。我想知道最好以哪种形式存储密码,以便对有权访问会话数据的人隐藏它。
到目前为止我想到的选项:
- 未加密:逻辑上最糟糕的选择。
-
散列:例如,将
sha256(password)保存到会话中。这也不是一个好的选择,因为破解者可以使用字典表来检索未加密的密码。 -
Salted & Hashed:例如,将
sha256(password+hash)保存到会话中。这是三个选项中最安全的一个,但它将是数据库条目的副本,这对我来说似乎不是一个好主意。破解者可以将自己的密码与自己的哈希值进行比较,并可能找出如何为整个数据库创建盐和哈希值。我不确定这是否是一个有效的问题,但我想 Stackoverflow 上知识渊博的用户能够告诉我。 ;) - Salted & Hashed,数据库保存递归散列字符串:从本质上讲,这似乎是一个不错的选择,但我读到递归散列密码总是一个坏主意。
那么,推荐哪一个?也许是我没想到的第五个?请注意,需要使用此变量来验证用户的凭据,因此我们不能只使用不同的 salt 对其进行哈希处理。
【问题讨论】:
-
您的问题可能更适合我们的姊妹网站security.stackexchange.com,因为它更多的是关于一般的 Web 应用程序安全实践,而不是特定的编程问题。但是,FWIW,我在下面提供了我的答案。
标签: security session hash passwords session-variables