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