c# – WPF PasswordBox有多安全,真的吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – WPF PasswordBox有多安全,真的吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2010字,纯文字阅读大概需要3分钟。
内容图文
![c# – WPF PasswordBox有多安全,真的吗?](/upload/InfoBanner/zyjiaocheng/806/29341b5984be490583855474dbf1bca9.jpg)
我最近已经就PasswordBox提出了几个问题,但在我的问题的核心,我需要一种非常安全的方法来将非常敏感的信息输入到我的.Net应用程序中.
开箱即用,WPF PasswordBox可以控制获取密码或其他敏感信息.为了安全起见,它通过SecurePassword属性提供了一个SecureString对象,在我看来,该属性足以满足我的需求.但是,我在这个控件中看到了一个主要缺陷 – 它有一个Password属性,它是用户在不安全的.Net字符串中输入的内容.
我想假设如果我从未在我的应用程序中访问Password属性,我的敏感信息的不安全版本将永远不会生成,必须进行垃圾回收.没事.但是,由于字符串的安全形式的要点是保持值不受窥探过程(我假设)可以读取它们的.Net内存,可能同样的窥探,恶意代码只是寻找一个闲置的PasswordBox在内存中找到一些方法来访问密码字段,使得使用SecureString值基本没用?
我承认,我不知道这些漏洞是如何执行的.但是,如果问题是某些应用程序可能在.Net内存管理器/垃圾收集器中嗅探您的变量,那么我觉得他们所要做的只是访问PasswordBox控件对象而不是字符串对象似乎是合理的.在内存中,只需访问密码属性.在这个难题中我可能会缺少什么?如果PasswordBox包含明文密码属性,它是如何安全的?
解决方法:
PasswordBox.Password属性从SecurePassword属性创建.NET字符串,它不会在内部将其存储为字符串.使用SecureString的重点是减少存储器中存在的感测数据的时间量,并减少该感测数据的副本数量.您可以在documentation中阅读有关SecureString的更多信息.
SecureString是加密的(如果可能的话,通常是加密的),所以如果有人可以只读原始内存(比如有人偷了你的内存转储) – 他将无法从中读取你的密码.如果您的应用程序如此受到攻击,以至于攻击者可以将自己的dll注入您的进程并在那里运行任意代码 – 那么您无论如何都会遇到更大的问题(并且很可能密码不会出现在内存中).
也就是说,在使用PasswordBox和SecureStrings时,您仍然可以遵循一些合理的指导原则.
>如果您需要访问它,请务必处理PasswordBox.SecurePassword的结果:
using (var pwd = myBox.SecurePassword) {
// do stuff
}
这可能看起来很奇怪(处理由属性返回的内容),但应该这样做,因为此属性返回SecureString的副本,而应该是一个方法,但由于某种原因是属性.
>尽可能少地访问密码属性,最好只在您真正需要时使用一次.您不希望密码的副本在内存中停留的时间越来越长.
>完成后,始终调用yourBox.Clear().这将设置密码为空字符串并清除内部SecureString内存.
内容总结
以上是互联网集市为您收集整理的c# – WPF PasswordBox有多安全,真的吗?全部内容,希望文章能够帮你解决c# – WPF PasswordBox有多安全,真的吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。