C# 扩展文本框';s使用SystemPasswordChar安全性

C# 扩展文本框';s使用SystemPasswordChar安全性,c#,winforms,security,textbox,password-protection,C#,Winforms,Security,Textbox,Password Protection,在使用“记住我”功能(用于用户名和密码凭据)时,我注意到,将UseSystemPasswordChar属性设置为true时,可以恢复隐藏的密码。下面屏幕截图上的示例: 我还注意到,虽然许多应用程序都会因同一问题而受到影响,但并非所有应用程序都会受到影响,因此我认为一定有办法避免这种情况 问题是,我需要采取什么方法来确保无法使用此方法检索凭据 提前感谢。保存密码后,再次向用户显示时,不要将旧密码放回框中。放置一些占位符文本,如果文本框与占位符文本匹配,则使用存储的密码 至于其他一些技巧,如果可能

在使用“记住我”功能(用于用户名和密码凭据)时,我注意到,将UseSystemPasswordChar属性设置为true时,可以恢复隐藏的密码。下面屏幕截图上的示例:

我还注意到,虽然许多应用程序都会因同一问题而受到影响,但并非所有应用程序都会受到影响,因此我认为一定有办法避免这种情况

问题是,我需要采取什么方法来确保无法使用此方法检索凭据


提前感谢。

保存密码后,再次向用户显示时,不要将旧密码放回框中。放置一些占位符文本,如果文本框与占位符文本匹配,则使用存储的密码

至于其他一些技巧,如果可能的话,将密码的哈希值而不是密码本身存储在内存中。您可以使用诸如Process Explorer之类的工具中的字符串实用程序在内存中查找密码字符串

如果无法存储哈希而不是密码(例如,如果您正在连接到其他服务,并且需要提交明文密码),则可以使用and来加密内存中的字符串

至于长期安全地存储密码,而不仅仅是存储在内存中,请在将字符串写入硬盘之前使用该类对其进行加密,并将设置为
CurrentUser
,以便只有登录的用户才能获取数据


请记住:您不能让某人无法找到存储的密码,但您可以显著提高获取密码的难度。

一旦保存了密码,当您再次向用户显示时,不要将旧密码放回框中。放置一些占位符文本,如果文本框与占位符文本匹配,则使用存储的密码

至于其他一些技巧,如果可能的话,将密码的哈希值而不是密码本身存储在内存中。您可以使用诸如Process Explorer之类的工具中的字符串实用程序在内存中查找密码字符串

如果无法存储哈希而不是密码(例如,如果您正在连接到其他服务,并且需要提交明文密码),则可以使用and来加密内存中的字符串

至于长期安全地存储密码,而不仅仅是存储在内存中,请在将字符串写入硬盘之前使用该类对其进行加密,并将设置为
CurrentUser
,以便只有登录的用户才能获取数据


请记住:你不能让别人无法找到存储的密码,但你可以大大提高获取密码的难度。

你是否担心另一个应用程序将自身注入你的内存空间并查询对象/控件?每个控件都将在内存中包含密码,以允许其随后切换到任何需要的控件。但必须有不同的方法,因为如果你阅读我与Scott的讨论,你会看到我提到同样用C#编写的KeyPass,而不会受到此影响。我试图找到更多的例子,尽管找到需要登录凭据的C#应用程序很困难。再举几个例子:filezilla为此而受苦,Minecraft的发射器则不然。两种不同的语言。到目前为止,我找到的唯一一个没有公开登录信息的.NET应用程序是KeyPass。但是,既然一个应用程序都能做到这一点,那么它一定是可能的。你是否担心另一个应用程序将自身注入你的内存空间并查询对象/控件?每个控件都将在内存中包含密码,以允许其随后切换到任何需要的控件。但必须有不同的方法,因为如果你阅读我与Scott的讨论,你会看到我提到同样用C#编写的KeyPass,而不会受到此影响。我试图找到更多的例子,尽管找到需要登录凭据的C#应用程序很困难。再举几个例子:filezilla为此而受苦,Minecraft的发射器则不然。两种不同的语言。到目前为止,我找到的唯一一个没有公开登录信息的.NET应用程序是KeyPass。但是,因为即使是一个应用程序也能做到这一点,所以它一定是可能的。这也是我的第一种方法(使用与实际密码长度相同的占位符字符),但由于不受此影响的程序不会显示任何文本,所以我认为必须有另一种方法。一个例子是KeePass应用程序,它也是用C语言编写的。您无法检索用于登录屏幕的字符,即使您在尝试之前亲自键入这些字符。字符长度不必相同,Windows会一直这样做,请在保存的密码中计算作为用户或计划任务登录的服务的点数。至于keypass是如何做到的,我不知道,我的印象是,启用密码掩码会在引擎盖下设置一些位,防止其他应用程序也看到。在我无意中发现之前,他们可能会使用非标准控件,这也是我的猜测/希望。我目前正在研究的是其他程序是如何实现这一点的,因为它们是C#应用程序,就像我上面提到的一样,没有这个问题。这也是我的第一个方法(使用与实际密码长度相同的占位符字符),但是,既然这些程序没有显示任何文本,那么我认为肯定有另一种方式。一个例子是KeePass应用程序,它也是用C语言编写的。您无法检索用于登录屏幕的字符,即使您在尝试之前亲自键入了这些字符。不需要相同的长度,Windows可以做到这一切