2012-02-27 70 views
0

我正在將用戶密碼存儲在SecureString中。在與DB的連接重置的情況下也保留這些。Oracle DB和SecureString

我的問題是,我試圖將密碼傳遞給OracleParamater,但我不確定它是否支持它。

Oracle的Oracle.DataAccess dll是否支持SecureStringBStr?因爲如果我必須將它轉換爲一個字符串,那麼這可能會擊敗SecureString的目的。

---編輯

我知道SecureString約爲周圍未加密保存的密碼儘可能少的副本儘量減少攻擊面。問題是,在某些時候,你必須解密密碼才能使用密碼。如果我可以在OracleParameter中傳遞char[]BStr或安全字符串本身,那麼在呼叫返回後我可以清除它。但是,如果我必須創建一個字符串才能將它傳遞給Oracle,那麼我剛剛創建了一個新的不可變的密碼副本。所以我不確定我獲得了多少。

+2

SecureString是一個「in -memory「的概念...... ADO.NET與它無關......如果你擔心安全」通過電線「,那麼使用加密連接和/或基於證書的方法...... – Yahia 2012-02-27 14:59:23

+0

我不是關注安全「通過電線」,這不是問題的意圖。我會附加這個問題來澄清 – Phyx 2012-02-27 15:11:31

+0

好的...現在更清楚了......看到我的回答如下... – Yahia 2012-02-27 15:26:51

回答

1

否 - 據我所知,你問什麼不支持......

但即使是支持的安全問題將繼續,因爲使用(OCI)Oracle驅動程序是天然的和不知道什麼SecureString因此將在內部處理值,而不加密,這就意味着這個值最終可能會在交換文件中未加密...

如果你問的是.NET的一方支持的話,它會更安全一些但只是如此...

如果你真的需要這樣的安全級別我窩uld建議重新設計軟件的那一部分,以便服務器端(Oracle數據庫)不需要「純文本」但使用加密值的方式使用加密值...

+0

我很害怕這個,我並不需要這種安全級別,但我認爲正是因爲Oracle驅動程序是本機的,所以它可能會使用(w_ )char *表示字符串,如果將非託管字符串作爲輸入,我仍然可以將其歸零,但遺憾的是幾乎沒有API支持SecureString,但感謝您的確認。 – Phyx 2012-02-27 15:33:09

0

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

它被實現的原因是,如果您使用簡單的string來保存用戶私人信息,即使您沒有更多的引用該對象並且它已經被垃圾收集,也有可能通過執行轉儲你的黑客代碼進程內存仍然可以訪問該內存位置中可用的數據,因此訪問私人信息。

如果是SecureString,那麼即使在內存轉儲時,該位置也將被刪除,所以即使在內存轉儲中,也不會看到與代碼中使用的字符串相關的任何內容。

至於建議由葉海亞,如果您關注有關連接安全數據transmisson安全,用於該目的的安全連接。

+0

這完全不是關於連接安全。我很清楚這是一個不同的主題。我在這裏提到內存中的安全性。我知道SecureString是關於減少攻擊面的。但是,如果我必須將SecureString轉換爲連接Oracle的字符串,那麼我只是將明文密碼作爲字符串公開。在這種情況下,我無法控制垃圾收集的時間 – Phyx 2012-02-27 15:09:43

+0

@Phyx:好吧,如果您關心內存中的安全性,那麼通過使用SecureString,您已經處於良好的狀態。 – Tigran 2012-02-27 15:10:55

+1

@Phyx:可能是我不喜歡你的**真正**關注。問題在於,在將SecureString轉換爲String的時刻,您將失去保護的好處。所以代碼變得不受保護。希望這可以幫助。 – Tigran 2012-02-27 15:25:17