繁体   English   中英

记住我复选框

[英]Remember me checkbox

我有一个具有用户登录表单的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 ,因为我知道有些软件可以像这样读取textBox并且它不安全。

题:

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

  2. 如果需要保存一些信息,如何对其进行加密?

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

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

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

编辑如果用户尝试手动输入密码,则可以清除文本框值并更改复选框的选中值,以便您现在知道该值不是哈希值。

据我了解,如果您想remember me功能,则应该(必须)以任何形式存储密码以验证用户身份。

一种方法是在您的产品中具有2个功能。 一个拥有Hash ,它将存储在数据库中,我想您当前正在使用它。 除此之外,还具有加密/解密功能。 remember me的复选框时,只需将加密值保存在您的app.config文件中即可。 现在,当用户再次打开应用程序时,请检查加密的密码并解密以验证用户身份。

用户dbw刚刚发布了我的另一种方法:)

希望能帮助到你。

恕我直言,这无法完成。 如果要在数据库中加密/散列/加盐并保存密码,那么您将无法真正以纯文本形式恢复密码。

当然,您可以欺骗用户(我将告诉您如何操作),但是需要定义您希望用户执行的操作:

  • 即使用户要求“记住我”,也要再次(每次)至少输入一次密码。 这很容易做到,只需检索用户ID并将密码框保留为空白即可。 没有技巧 干净利落。 甚至Google都为他们的网站这样做。
  • 现在欺骗时间。 让用户无需密码即可输入应用程序,而只需输入用户名即可。 您只需在密码框中输入一些默认值即可(用户会认为实际上已检索到密码,但是您将进行编程,以使每当选择“记住我”选项时,您都将自动填写此信息)并让用户离开输入。但这不是一个好的选择,因为使用该系统的任何人都可以登录到您的应用程序。 您将必须根据安全要求拨打电话。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM