如果我理解正确,这是为了避免将纯文本存储在内存中,从而使应用程序免受针对内存、垃圾堆或分页到磁盘的奇特攻击,SecureString接收非托管字节并以一个非托管字节的方式消耗-然后将字符串从内存中擦除。(如果我理解错了,请纠正我!)
在ASP.NET中,密钥在Web表单中进行收集,然后通过HTTPS进行提交。但是,请求对象将表单中的所有请求值转换为名称-值对,并将它们放入一个集合中,例如Request["TxtPassword"]-因此,在我获取字符串之前,它已经被不安全地写入了内存。更糟糕的是,如果我在使用控件,则文本框的属性中将包含更多托管字符串的不安全表示。
要对此SecureString执行任何操作,我需要一个接受非托管字符串的API-因此,似乎我无法将SecureString用于存储过程参数或其他大部分操作。
我是做错了什么,还是试图使用SecureString而不将未安全的字符串副本泄漏到托管内存中是愚蠢的行为?
切换到OAuth或Windows身份验证不是选项。