2008-12-23 33 views
5

我剛剛回答了question,我說雖然字符串實習很好,但它可能是一個安全問題,因爲稍後可以輕鬆訪問字符串值。訪問clr的實習字符串列表

雖然我很確定這是真的:-)我不確定它真的有多容易。我試着用google搜索這個主題,但沒有得到相關的結果(google-fu在這方面很弱),那麼我就試試你們這些人。

你知道任何「簡單」的方式來訪問應用程序domian中的交互字符串列表嗎?我必須使用內存轉儲和那些東西或是有像AppDomain.GetInteredStringsList()?

並與此相關:從intered字符串中獲取任何有用數據是多麼容易。將敏感數據存儲在字符串中真的存在安全漏洞嗎?

回答

6

這不是特別容易 - 但它是可行的。

基本上,如果你有任何可以進行內存轉儲的東西,你可以找到一些看起來像是字符串對象的內存。 (特別是,它們在開始時都會有相同的「指向類型信息的指針」,所以如果你有一個樣本字符串,那麼你就不在了)。

順便說一句,這沒什麼用與interned字符串。它不像所有字符串都是實際的 - 只有字符串常量和用戶明確實施的字符串。

+0

引用沒有指向類型信息的指針,對象在它們的對象頭中有這些信息。 – 2008-12-23 13:22:26

+0

對不起,這就是我的意思 - 一些*是字符串的內存。我會編輯答案。 – 2008-12-23 19:17:12

+0

...和您使用的字符串開啓,即使它們不匹配其中一種情況。我想這屬於「明確實習生」,儘管它沒有明確地做到這一點;) – 2008-12-23 19:19:12

1

在合理的應用程序中,密碼存儲在字符數組中,以便在不再需要時可以覆蓋它們。

3

這是一個真正的安全漏洞,存儲 敏感數據的字符串?

是的,絕對是的!

敏感安全數據應該使用SecureString類來存儲。

編輯:

因爲即使是實習字符串存儲在託管堆上,使用工具來轉儲堆,將顯示在應用程序中的所有字符串。

1

不是不可能做...雖然不一定通過託管代碼。任何有權訪問進程轉儲(windb/sos/etc)的內容都不會尋找字符串。