【问题标题】:django authentication stored password reconstructiondjango 身份验证存储密码重建
【发布时间】:2013-06-09 05:38:24
【问题描述】:

我有一个 django 登录机制,它使用 django 来存储密码的散列版本。然后我有一个需要向服务器进行身份验证的桌面应用程序。但是,我不知道如何计算该哈希值...

现在,我正在向我的登录页面发布客户的用户名和密码(没有散列),这是非常不安全的。 (运行 alpha)我知道另一种方法是在发送之前和接收之后使用新的散列函数散列和取消散列,但我想我宁愿使用相同的。

【问题讨论】:

    标签: django django-authentication


    【解决方案1】:

    你想错了。

    1. 哈希通常以<function>$<hash>的格式存储

    2. 使用的<function> 是广为人知的算法

    3. 你可以在django中轻松找到这些<function>背后的代码

    4. 即使你从客户端发送了哈希,它也可以像明文密码一样被拦截,攻击者可以使用它来访问提供给使用它的客户端的 API。

    5. 我不太确定这一点,但我认为哈希是用 SECRET_KEY 加盐的,您需要将其提供给客户端才能创建哈希,因此会泄露非常重要的信息。

    6. 散列是一种单向函数,以后不能取消散列。

    7. 如果您想增加安全性,请使用 SSL 或其他基于非对称加密的方案,例如 gnupg 或 ssh 密钥。

    【讨论】:

    • 我不需要向客户端提供 secret_key。它只会在桌面应用程序代码中。如果我知道 django 是如何做到 5 的,我认为应该没问题
    【解决方案2】:

    我不知道为什么从您的桌面应用程序发布未经哈希处理的密码会比从浏览器发布更不安全,这当然是您每次登录网站时都会做的事情。这是完全相同的机制,应该以完全相同的方式完成。

    在任何情况下,正如 yaccz 所指出的,如果不让桌面应用程序以某种方式访问​​您的密钥,您就无法重现散列机制。即使无法立即访问,仅在客户端计算机上存在的安全风险也比您想象的要大得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 2011-01-25
      • 2011-09-27
      • 2020-08-22
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多