0

我目前将用户密码存储在SecureString. 如果与数据库的连接重置,它也会保留。

我的问题是,我正在尝试将此密码传递给OracleParamater,但我不确定它是否支持它。

Oracle 的Oracle.DataAccessdll 是否支持SecureStringBStr?因为如果我必须将其转换为字符串,那将有点违背SecureString.

- - 编辑

我知道这SecureString是通过尽可能少地保留未加密的密码副本来减少攻击面。问题是在某些时候你当然必须解密密码才能使用它。如果我可以在 an 中传递 achar[]或 aBStr或安全字符串本身,OracleParameter那么我可以在调用返回后清除它。但是如果我必须创建一个字符串才能将其传递给 Oracle,那么我刚刚创建了一个新的不可变密码副本。所以我不确定我当时获得了多少。

4

2 回答 2

1

不 - 不支持您所要求的 AFAIK...

但是,即使它被支持,安全问题仍然存在,因为使用的 Oracle 驱动程序 (OCI) 是本机的并且不知道任何信息,SecureString因此它将在内部处理该值而不加密,这反过来意味着该值可能最终例如未加密交换文件...

如果您的要求在 .NET 方面得到支持,那会更安全一些,但仅此而已......

如果您真的需要那种级别的安全性,我建议您重新设计软件的该部分以使用加密值,以使服务器端(Oracle DB)不需要“纯文本”但可以使用加密值.. .

于 2012-02-27T15:23:36.077 回答
0

SecureString是您私人信息的内存持有者。

实现它的原因是,如果您使用 simplestring来保存用户私有信息,即使在您不再引用该对象并且它已经被垃圾收集之后,通过执行进程内存转储的黑客代码仍有可能访问该内存位置中可用的数据,因此访问私人信息。

相反,如果是SecureString,则该位置将被删除,因此即使在内存转储中,您也不会看到与代码中使用的字符串相关的任何内容。

正如 Yahia 所建议的,如果您担心连接安全性数据传输安全性,请为此目的使用安全连接。

于 2012-02-27T15:04:40.107 回答