我目前正在SecureString
存储用户密码。如果与DB的连接重置,也会保留它。
我的问题是,我正在尝试将此密码传递给OracleParamater
,但我不确定它是否支持。
Oracle的Oracle.DataAccess
dll是否支持SecureString
或BStr
?因为如果我必须将其转换为字符串,那么有点会失去SecureString
的目的。
---编辑
我知道SecureString
是关于通过尽可能少地保密密码副本来减少攻击面。问题是在某些时候你必须解密密码才能使用它。如果我可以在char[]
中传递BStr
或OracleParameter
或安全字符串本身,那么我可以在呼叫返回后将其清除。但是如果我必须创建一个字符串以便将其传递给Oracle,那么我刚刚创建了一个新的密码不可变副本。所以我不确定自己获得了多少收获。
答案 0 :(得分:1)
不 - AFAIK你的要求不受支持......
但是即使它受到支持,安全问题仍然存在,因为使用的Oracle驱动程序(OCI)是本机的,并且对SecureString
一无所知,因此它将在内部处理该值而不加密,这反过来意味着这值可以以交换文件中的未加密结束...
如果您提出的要求在.NET方面得到支持,那将会更加安全,但仅仅是这样......
如果您确实需要这种级别的安全性,我建议您重新设计软件的这一部分,以便使服务器端(Oracle DB)不需要“纯文本”但使用加密的方式使用加密值值...
答案 1 :(得分:0)
SecureString是您私人信息的内存持有者。
实现它的原因是,如果你使用简单的string
来保存用户私有信息,即使你不再引用该对象并且它已经被垃圾收集,也可能通过执行黑客代码转储进程内存仍然可以访问该内存位置中可用的数据,因此访问私有信息。
如果是SecureString
,那么该位置将被删除,因此即使在内存转储中,您也不会看到与代码中使用的字符串相关的任何内容。
根据Yahia的建议,如果您担心连接安全性或数据传输安全性,请使用安全连接。