【问题标题】:Remember me checkbox记住我复选框
【发布时间】:2014-02-04 23:16:15
【问题描述】:

我有一个具有用户登录表单的winform 应用程序。我使用 3 个参数将我的用户登录信息存储在数据库中:用户名、哈希密码、盐:

salt = random string that will be stored in database for every user
hashed password = MD5(MD5(inputPassword) + MD5(salt))

我想在我的登录表单中有一个名为Remember me的复选框,当用户输入正确的信息并检查它时,下次用户打开程序时,他们的用户信息将自动输入,用户只需要点击login按钮。

我不能直接保存输入的密码,下次用它填写密码textBox,因为我知道有些软件可以像这样读取textBoxes,而且不安全。

问题:

  1. 如何在不保存用户密码的情况下做到这一点?

  2. 如果我需要保存一些信息,如何加密?

  3. 是否需要更改我的安全策略?

请注意,这是为客户端创建的客户端/服务器应用程序和登录表单。

【问题讨论】:

  • 虽然很荣幸您尝试通过执行MD5(MD5(inputPassword) + MD5(salt)) 来保护用户密码,但您应该改用proper password derivation function。使用 GPU 和密码方法,现代系统可以轻松地每秒尝试超过 1,000,000,000 个密码。使用适当大的ItterationCount 来表示Rfc2898DeriveBytes,您可以轻松地将这个数字降低到每秒 100 个密码。

标签: c# winforms security hash salt


【解决方案1】:

您可以将密码的哈希值保存在本地数据库中,并且您可以有一个隐藏的复选框,它告诉您您已经从已经哈希的数据库中填充了信息,并且在询问身份验证时您不需要哈希再次输入密码值。

编辑如果用户尝试手动输入密码,那么您可以清除文本框的值并更改复选框选中的值,这样您现在就知道该值不是散列值。

【讨论】:

    【解决方案2】:

    据我了解,如果您想拥有remember me 功能,那么您应该/必须以任何形式存储您的密码以对用户进行身份验证。

    一种方法是,在您的产品中拥有 2 个功能。有一个Hash,这将在数据库中,我认为您目前正在这样做。除此之外,还有Encrypt/Decrypt的功能。当remember me 被选中时,只需将加密值保存在您的app.config 文件中。现在,当用户再次打开应用程序时,检查加密密码并解密以验证用户身份。

    用户 dbw 刚刚发布了我的其他方法 :)

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      恕我直言,这是不可能的。如果您正在加密/散列/加盐并将密码保存在数据库中,那么您无法真正以纯文本形式取回它。

      当然,你可以欺骗用户(我会告诉你如何),但需要定义你希望用户做什么:

      • 即使在用户要求“记住我”之后,至少再次(每次)输入密码。这可以很容易地完成,只需检索用户 ID 并将密码框保留为空白。没有技巧。干净利落。甚至 Google 也为他们的网站这样做。
      • 现在是花招时间。让用户在没有密码的情况下进入应用程序,而只是用户名。 You can just enter some default value in password box (user will think the password is actually retrieved but you will program such a way that whenever "remember me" option is selected, you will just auti-fill this info) and let the user go但这不是一个好的选择,因为可能任何使用该系统的人都可以登录到您的应用程序。您必须根据您的安全要求接听电话。

      【讨论】:

        【解决方案4】:

        在 Windows 上有一个功能。 DataProtector 和 ProtectedData 类可用于根据机器信息加密二进制数据。您可以将加密的范围指定为基于用户或基于系统,这可以派上用场。

        1. 如果您认为最好只序列化登录令牌信息而不是用户凭据。

        2. 您只需加密序列化信息并将其存储在您想要的任何位置。并在您想在启动时使用它时对其进行解密和反序列化。

        3. 我想是的,是的。

        您可以在这里查看它们:

        https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.dataprotector?view=netframework-4.7.2

        https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.protecteddata?view=netframework-4.7.2

        【讨论】:

          猜你喜欢
          • 2021-09-18
          • 2017-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多