色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

.NET : 如何保護(hù)內(nèi)存中的敏感數(shù)據(jù)?

      我們程序的威脅來(lái)自于各個(gè)方面.在互聯(lián)網(wǎng)高度發(fā)達(dá)的今天, 安全性問(wèn)題已經(jīng)是企業(yè)軟件開(kāi)發(fā)所必須面對(duì)的最重要的問(wèn)題. 從安全學(xué)的一般意義上來(lái)講,安全性主要體現(xiàn)在兩個(gè)方面:

  • 敏感數(shù)據(jù)的泄露
  • 敏感數(shù)據(jù)的破壞

      從具體上來(lái)說(shuō), .NET 元數(shù)據(jù)機(jī)制的設(shè)計(jì), 既方便了反射等強(qiáng)大特性的實(shí)現(xiàn), 又同時(shí)給代碼安全及程序運(yùn)行時(shí)安全帶來(lái)了巨大的隱患.迄今為止, 還未發(fā)現(xiàn)比較有效元數(shù)據(jù)可見(jiàn)性控制方法. 當(dāng)然, 這不在本文的討論范圍之內(nèi). 我還是更愿意在這篇文章在針對(duì).NET的內(nèi)存分配機(jī)制討論一個(gè)更具體的問(wèn)題: 如何保護(hù)在內(nèi)存中存儲(chǔ)的敏感數(shù)據(jù)?

String的駐留機(jī)制帶來(lái)的安全性問(wèn)題

      String是代碼中使用頻率很高的對(duì)象類(lèi)型. 為了提高字符串的處理速度, 節(jié)省內(nèi)存空間, Microsoft為.NET String類(lèi)設(shè)計(jì)了駐留機(jī)制. 其大概的邏輯模型是, 大部分String存儲(chǔ)在一個(gè)類(lèi)似的Hash Table中, string的內(nèi)容是哈希表的key, 該key對(duì)應(yīng)的value是string的內(nèi)存地址. 這樣內(nèi)容相同的string實(shí)際上只是對(duì)應(yīng)內(nèi)存堆上同一個(gè)字符串.之所以說(shuō)是大部分而不是全部, 是因?yàn)橛幸徊糠謩?dòng)態(tài)創(chuàng)建(concat)的string, 是不會(huì)進(jìn)入這樣一個(gè)虛擬的hash Table中的. 本文的最后附上String類(lèi)的源代碼, 有興趣的同學(xué)可以研究研究:D

      這就帶來(lái)了最主要的問(wèn)題, 你無(wú)法準(zhǔn)確控制或者預(yù)測(cè)一個(gè)特定字符串的生命周期. 一個(gè)以string形式呈現(xiàn)的敏感數(shù)據(jù)(比如密碼)很有可能在內(nèi)存中一直存在, 而你卻預(yù)測(cè)它在超出某個(gè)特定函數(shù)的作用域的時(shí)候就被垃圾回收了. 這樣, 當(dāng)發(fā)生操作系統(tǒng)換頁(yè)的時(shí)候(而這也往往是可能發(fā)生的), 這個(gè)敏感數(shù)據(jù)就被保存到本地文件pagefile.sys當(dāng)中, 或者當(dāng)操作系統(tǒng)休眠的時(shí)候, 敏感數(shù)據(jù)進(jìn)入hiberfil.sys中.一個(gè)可能的敏感數(shù)據(jù)泄漏過(guò)程是:

 

Drawing1

 

使用SecureString類(lèi)

      現(xiàn)在既然String靠不住了,我們能有什么簡(jiǎn)單的方法來(lái)特別的保護(hù)我的敏感數(shù)據(jù)嗎? 幸運(yùn)的是, .NET從Version 2.0開(kāi)始, 為我們提供了一套基于DPAPI的解決方法 - SecureString.

      SecureString類(lèi)具有以下特性:

  • SecureString中的內(nèi)容是加密之后的,而不是平文;

  • 使用windows的加密方案DPAPI ;

  • SecureString只能在基于NT的平臺(tái)上使用

C#代碼示例

NET技術(shù).NET : 如何保護(hù)內(nèi)存中的敏感數(shù)據(jù)?,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 朝阳市| 德令哈市| 泰宁县| 襄汾县| 含山县| 长治县| 永靖县| 含山县| 大石桥市| 南安市| 冕宁县| 疏勒县| 西乌珠穆沁旗| 绥芬河市| 梧州市| 定安县| 马尔康县| 江源县| 河池市| 汤原县| 砚山县| 宜丰县| 南部县| 绥芬河市| 桐梓县| 漯河市| 大理市| 仲巴县| 安西县| 大埔区| 崇礼县| 塔河县| 明星| 岚皋县| 华亭县| 张家界市| 韶山市| 吉林省| 贵港市| 明星| 金溪县|