分析概括ADO.NET連接信息安全
ADO.NET經(jīng)過(guò)長(zhǎng)時(shí)間的發(fā)展,很多用戶(hù)都很了解ADO.NET了,這里我發(fā)表一下個(gè)人理解,和大家討論討論ADO.NET連接信息。保護(hù)應(yīng)用程序時(shí),最重要的目標(biāo)之一是保護(hù)對(duì)數(shù)據(jù)源的訪問(wèn)。如果連接字符串未受保護(hù),那么它就是一個(gè)潛在漏洞。如果以純文本形式存儲(chǔ)ADO.NET連接信息或者使連接信息持續(xù)位于內(nèi)存中,則可能會(huì)損害整個(gè)系統(tǒng)??梢允褂肕SIL反匯編程序(Ildasm.exe)讀取嵌入在源代碼中的連接字符串,以查看已編譯的程序集中的Microsoft中間語(yǔ)言(MSIL)。
根據(jù)以下因素可能會(huì)出現(xiàn)與連接字符串有關(guān)的安全漏洞:所使用的身份驗(yàn)證類(lèi)型,連接字符串持久地位于內(nèi)存和磁盤(pán)中的方式,以及在運(yùn)行時(shí)構(gòu)造連接字符串所采用的技術(shù)。
使用Windows身份驗(yàn)證
#T#為了幫助限制對(duì)數(shù)據(jù)源的訪問(wèn),必須保護(hù)諸如用戶(hù)ID、密碼和數(shù)據(jù)源名稱(chēng)等ADO.NET連接信息的安全。為避免公開(kāi)用戶(hù)信息,建議盡可能使用Windows身份驗(yàn)證(有時(shí)也稱(chēng)為“集成安全性”)。使用IntegratedSecurity或Trusted_Connection關(guān)鍵字在連接字符串中指定Windows身份驗(yàn)證后,不必再使用用戶(hù)ID和密碼。在使用Windows身份驗(yàn)證時(shí),用戶(hù)由Windows進(jìn)行身份驗(yàn)證,通過(guò)對(duì)Windows用戶(hù)和組授予權(quán)限來(lái)確定他們是否可訪問(wèn)服務(wù)器和數(shù)據(jù)庫(kù)資源。
在不能使用Windows身份驗(yàn)證的情況下必須格外小心,因?yàn)榇藭r(shí)用戶(hù)憑據(jù)在連接字符串中是公開(kāi)的。在ASP.NET應(yīng)用程序中,您可以將Windows帳戶(hù)配置為用于連接到數(shù)據(jù)庫(kù)和其他網(wǎng)絡(luò)資源的固定標(biāo)識(shí)。您可以在web.config文件中的標(biāo)識(shí)元素中啟用模擬,并指定用戶(hù)名和密碼。
- <identityimpersonateidentityimpersonate="true"
- userName="MyDomain\UserAccount"
- password="*****"/>
固定標(biāo)識(shí)帳戶(hù)應(yīng)是低權(quán)限帳戶(hù),僅被授予數(shù)據(jù)庫(kù)中的必要權(quán)限。此外,您還應(yīng)該加密配置文件,從而使用戶(hù)名和密碼不會(huì)以明文形式公開(kāi)。
不要使用通用數(shù)據(jù)鏈接(UDL)文件
不要在通用數(shù)據(jù)鏈接(UDL)文件中存儲(chǔ)OleDbConnection的連接字符串。UDL以明文形式存儲(chǔ),無(wú)法加密。因?yàn)閁DL文件對(duì)您的應(yīng)用程序來(lái)說(shuō)是一個(gè)基于文件的外部資源,所以無(wú)法使用.NETFramework保護(hù)或加密該文件。
利用連接字符串生成器避免注入攻擊
當(dāng)動(dòng)態(tài)字符串串聯(lián)根據(jù)用戶(hù)輸入的內(nèi)容構(gòu)建連接字符串時(shí),會(huì)發(fā)生連接字符串注入攻擊。如果用戶(hù)輸入的內(nèi)容未經(jīng)驗(yàn)證,并且惡意文本或字符串未被轉(zhuǎn)義,則攻擊者可能會(huì)訪問(wèn)敏感數(shù)據(jù)或服務(wù)器上的其他資源。為解決此問(wèn)題,ADO.NET2.0引入了新的連接字符串生成器類(lèi),以驗(yàn)證連接字符串語(yǔ)法并確保不會(huì)引入附加參數(shù)。有關(guān)更多信息,請(qǐng)參見(jiàn)連接字符串生成器(ADO.NET)。
使用PersistSecurityInfo=False
PersistSecurityInfo的默認(rèn)值為false;建議在所有連接字符串中使用此默認(rèn)值。如果將PersistSecurityInfo設(shè)置為true或yes,則允許在打開(kāi)連接后通過(guò)連接獲取安全敏感信息(包括用戶(hù)ID和密碼)。如果將PersistSecurityInfo設(shè)置為false或no,則在使用安全信息打開(kāi)連接后會(huì)丟棄安全信息,這可確保不受信任的來(lái)源不能訪問(wèn)安全敏感信息。
加密配置文件
您還可以在配置文件中存儲(chǔ)連接字符串,從而不必將它們嵌入到應(yīng)用程序的代碼中。配置文件是標(biāo)準(zhǔn)XML文件,.NETFramework已為這些文件定義了一組常用的元素。配置文件中的連接字符串通常存儲(chǔ)在Windows應(yīng)用程序的app.config的<connectionStrings>元素中,或存儲(chǔ)在ASP.NET應(yīng)用程序的web.config文件中。有關(guān)在配置文件中存儲(chǔ)、檢索和加密連接字符串的基本知識(shí)的更多信息,請(qǐng)參見(jiàn)連接字符串和配置文件(ADO.NET)。