用户有ASPX
页。
输入textox
(密码)。
用户填写密码。
该页面已提交给IIS。
首先进入iis。
在此阶段,密码以明文形式存储在内存中。
现在Asp.net将其密码放在安全字符串中。
进行一些计算后,页面将被发送到客户端。
来自 IIS POV:
他实际上仍然将密码视为纯文本......不是吗?
答案 0 :(得分:3)
根据您的故事,将密码存储在SecureString
中毫无意义。它已经作为普通字符串存在于内存中,因此将其存储回SecureString
并没有用。此外,当表单返回时,所有内容仍将以纯文本形式发回。
在这些情况下,最好保护服务器 - 客户端通信(即使用SSL),而不是试图保护系统免受可以访问计算机,分析内存和提取密码的攻击者的攻击(!)
答案 1 :(得分:1)
读取SecureString更复杂。没有简单的ToString方法,它也用于保证数据的安全。要读取数据,C#开发人员必须直接访问内存中的数据。幸运的是,.NET Framework使其变得相当简单。使用System.Runtime.InteropServices.Marshal类的适当成员(例如SecureStringToBSTR方法)来操作SecureString对象的值。
IntPtr stringPointer = Marshal.SecureStringToBSTR(objSecureString);
string normalString = Marshal.PtrToStringBSTR(stringPointer);