gpt4 book ai didi

security - 'exposed' 如何在 session 中存储密码?

转载 作者:行者123 更新时间:2023-12-04 04:45:36 25 4
gpt4 key购买 nike

我正在使用 Python 和 Flask 制作一个网站,并且想知道一些对我来说相当重要的事情。

过去,作为一个没有受过教育的程序员,我总是在 session 中保存未加密的用户密码,以便用户名和密码可以在请求时重新验证。目前我正在制作我的第一个严肃的网站,所以我也想做得更好。

我知道有一些方法可以嗅探 session 变量,例如通过以一种或另一种方式获取另一个人的 session ID。我想知道最好以什么形式存储密码,以便对有权访问 session 数据的人隐藏它。

到目前为止我想到的选项:

  • 未加密 : 逻辑上最糟糕的选择。
  • 散列 : 例如,保存 sha256(password)到 session 。这也不是一个好的选择,因为破解者可以使用字典表来检索未加密的密码。
  • 盐渍和散列 : 例如,保存 sha256(password+hash)到 session 。这是三个选项中最安全的一个,但它将是数据库条目的副本,这对我来说似乎不是一个好主意。破解者可以将自己的密码与自己的哈希值进行比较,并可能弄清楚如何为整个数据库创建盐和哈希值。我不确定这是否是一个有效的问题,但我想 Stackoverflow 上一位知识渊博的用户能够告诉我。 ;)
  • Salted & Hashed,数据库保存了一个递归散列的字符串 :从本质上讲,这似乎是一个不错的选择,但我读过递归散列密码总是一个坏主意。

  • 那么,推荐哪些呢?也许是我没想到的第五个?请注意,需要使用此变量来验证用户的凭据,因此我们不能仅使用不同的盐对其进行散列,等等。

    最佳答案

    为什么你需要在会​​话中存储用户的密码?我看不出有什么特别的需要,它只是无缘无故地制造了潜在的安全风险。

    相反,只需存储用户名,可能还有一个表明用户已通过身份验证的标志。当然,您应该在用户注销时清除标志(和/或只是删除整个 session 数据),以便以某种方式访问​​旧 session cookie 的攻击者无法在注销后恢复 session 。

    您可能还希望在 session 中存储“上次访问”时间戳,以便您可以让旧的陈旧 session 超时。或者,您可以依赖 session 框架的内置 session 过期行为,但将备份机制完全置于您的应用程序的直接控制之下可能仍然是一个好主意。

    附言。显然,无论您做什么,请确保您的 session 标识符是使用加密安全的随机数生成器(例如 Crypto.Random.random )生成的,并且它们的长度足以无法猜测(至少 64 位 = 16 位十六进制数字,尽管是 128 位)更好)。如果由于某种原因你不能这样做,另一种方法是自己生成这样一个随机 token ,将它存储在 session 和 cookie 中,并在使用任何实际 session 数据之前验证 session 和 cookie token 匹配.

    关于security - 'exposed' 如何在 session 中存储密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231101/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com