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