gpt4 book ai didi

wpf - 密码不是通过PasswordBox.Password 属性泄露的吗?

转载 作者:行者123 更新时间:2023-12-02 05:59:30 25 4
gpt4 key购买 nike

msdn documentationPasswordBox.Password 上说:

When you get the Password property value, you expose the password as plain text in memory. To avoid this potential security risk, use the SecurePassword property to get the password as a SecureString.

因此,我在 PasswordChanged 事件上将 SecurePassword 发送到我的 View 模型,期望一切都是安全的,但是如果我使用 Snoop 检查我的应用程序,在 PasswordBox 的 Password 中 属性我看到我以纯文本形式输入的密码。这难道不会扼杀使用 SecurePassword 的全部目的吗?我还应该做些什么来保护密码吗?

最佳答案

这是我的拙见。

Snoop 在运行的应用程序中注入(inject)其代码。所以,它基本上是一个黑客工具。一个非常易于使用的黑客工具,仅适用于您的 GUI。这就是为什么简单地改变任何项目的可见性来向用户隐藏一些数据是一个糟糕的安全决策。有关限制、访问和安全的所有内容都不应该在 UI 层处理。 How to Snoop proof your wpf application?有办法但答案的要点是,您必须以不允许窥探违反任何内容的方式设计应用程序。例如,验证服务器上的所有内容。

回到你的问题:

有两种情况。第一个是:用户创建密码。我相信如果用户或用户的恶意软件此时会看到密码,这不是一个问题。然后您接收并存储安全字符串。并清除用户密码。

第二种情况:您向用户显示存储的密码。诀窍是——你不显示它。您知道密码的长度,因此可以使用 **** 显示刚刚禁用的文本框。如果用户想要更改密码 - 您给他实际的密码框,他必须在其中填写旧密码和新密码,然后我们回到场景#1。

一线希望是:

当用户输入密码时,这并不是什么大问题,它以明文形式存在于内存中的某个位置,因为用户知道他输入的内容,并且恶意软件可以跟踪按下的按键。

存储密码后,您永远不会将其返还给用户

<小时/>

更新:这是密码框的密码属性的源代码

   public string Password
{
[SecurityCritical]
get
{
string password;

using (SecureString securePassword = this.SecurePassword)
{
IntPtr ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(securePassword);

try
{
unsafe
{
password = new string((char*)ptr);
}
}
finally
{
System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(ptr);
}
}

return password;
}

所以,我猜MSDN的意思是,每当你访问Password属性时,通过在代码中调用它(或者在调试时在VS中查看它,或者在Snoop中查看它),你调用它的get方法,该方法将SecuredString解密为纯文本,将其暴露给内存。如果您不调用Password属性并且不通过在软件工具中检查来调用它,那么密码不会以纯文本形式显示在内存中。

关于wpf - 密码不是通过PasswordBox.Password 属性泄露的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32751442/

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