如果我理解正确,这是为了将纯文本保留在内存之外,这样应用程序就可以安全地抵御对内存、垃圾堆或分页到磁盘的内存的深奥攻击。SecureString 被馈入非托管字节并一次消耗一个非托管字节 - 然后从内存中删除该字符串。(如果我离开,请纠正我!)
在 ASP.NET 中,秘密被收集在一个 web 表单中,该表单以 HTTPS 回发。但随后 Request 对象将表单中的所有请求值转换为名称值对并将它们放入一个集合中,例如 Request["TxtPassword"]——所以即使在我得到字符串之前,它已经被不安全地写入内存。更糟糕的是,如果我使用的是控件,那么不安全的表示将在 TextBox 的属性中包含更多托管字符串。
要对这个 SecureString 做任何事情,我需要一个接受非托管字符串的 API——所以看来我不能将安全字符串用于存储的 proc 参数或其他许多参数。
我做错了还是尝试使用 SecureString 而不是将不安全字符串的副本泄漏到托管内存中是愚蠢的差事?
切换到 OAuth 或 Windows 身份验证不是一种选择。