wpf - PasswordBox 绑定(bind)问题 MVVM

标签 wpf mvvm securestring passwordbox

我遇到了密码框绑定(bind)的问题。我的应用程序遵循 MVVM。当我试图搜索谷歌以了解如何解决密码框绑定(bind)问题时,我发现了两种解决方案 -
1> 附加属性的使用
2> 使用安全字符串 (http://www.griffinscs.com/blog/?tag=mvvm)。
由于第二个选项似乎更安全,我倾向于选择这个选项。
但后来我发现我可以使用以下代码在安全字符串中提取实际字符串

IntPtr iPtr = Marshal.SecureStringToBSTR(securePassword);
// securePassword is of SecureString type

string str = Marshal.PtrToStringUni(iPtr);

现在我有点困惑。请帮助我了解以下问题
1> 使用安全字符串真的比使用字符串更好吗?
2> 当我遵循 MVVM 模式并且同时我希望密码字符串是安全的时,以上两者中的哪一个是正确的选择。

最佳答案

Is use of Secure string is really better than use of String



是和不是。 SecureString为您提供如何将 secret 字符串保存在内存中的选项。它们有助于防止调皮的人使用调试器检查应用程序的内存内容以寻找 secret ,并且它们还提供比常规字符串更好的处置保证。但也必须说它们是一个可以使用的 PITA,目前实际上很少有框架使用它们。 This previous SO answer可以很好地说明它们的好处。

Which one of the above two is the right option when I am following MVVM pattern and at the same time I want password strings to be secure



在某些阶段,您将需要使用密码。很难获得 SecureString 的内容——它是为了安全。但是您如何获取内容并将该密码存储到您的数据库中,以便您可以将 future 的登录与其进行比较?答案是 SecureString 不能解决这个问题——你仍然需要在加盐和散列并存储它之前提取真正的字符串。如果输入的密码用于创建 X509Certificate2 并且您永远不会存储它,则使用 SecureString。

所以,答案是……
在您需要自己访问字符串内容的地方使用常规字符串,在框架方法或 API 函数需要的地方使用安全字符串。

这意味着如果您要在 UI 中使用 PasswordBox,那么您将需要访问未加密的内容,以便您可以将其存储或将其与先前存储的条目进行比较。

关于wpf - PasswordBox 绑定(bind)问题 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15306835/

相关文章:

使用 pfx 签名的 C# 代码

c# - 另一个 ViewModel 的属性不会改变

c# - 根据MVVM模式对gridview进行排序

c# - 设置密码框的文本

c# - WPF如何在进度条上显示文字

wpf - 取消订阅 ViewModel 中的 EventAggregator 事件

WPF + MVVM - 访问用户控件中的对象/属性

c# - 将 SecureString 放入 PasswordBox

powershell - 在 PowerShell 中保护 Appveyy 变量

c# - 如何在运行时使用资源字典更改 UI 语言?