是否需要在 web.config 中保護連接字元串?
所以我使用 SQL 身份驗證在我的 web.config 中使用連接字元串。
當然人們說這可能是一個漏洞,因為您以明文形式儲存密碼。
但是,據我所知,IIS 從不為 web.config 提供服務,而且 web.config 無論如何都應該只有管理員和 IIS 的讀取權限。因此,如果黑客已經獲得了對網路伺服器的訪問權限,那麼我使用什麼加密都無關緊要,因為私鑰將在網路伺服器上。
通過混淆加密連接字元串不會被歸類為安全嗎?
是否值得加密 web.config 連接字元串並將私鑰儲存在網路伺服器上?
此外,當然,如果我不使用 SSL,我將通過 HTTP 以明文形式傳輸連接字元串。如果我使用 SSL,那麼這個問題也應該得到緩解。
我不會說在 Web.config 中儲存明文密碼本身就是一個安全漏洞。但是加密密碼是一種有用的縱深防禦措施,而不僅僅是通過默默無聞的安全性:
- 如果 IIS 配置錯誤以提供 Web.config 服務怎麼辦?
- 如果在 ASP.NET 中發現了允許任何人下載 Web.config的安全漏洞(如padding oracle 漏洞)怎麼辦?
- 對 Web 伺服器有不同程度的訪問,從完全管理權限到伺服器端程式碼注入。如果攻擊者只能設法做到後者,他可能能夠讀取 Web.config 但可能無法訪問機器密鑰,尤其是當您的應用程序在部分信任下執行時。
最後,由您決定在 Web.config 中儲存明文密碼的風險是否可接受。當然,如果 Windows 身份驗證是一個選項,那麼您可能需要考慮使用它而不是 SQL 身份驗證。
**更新:**在談論安全性時,辨識資產和威脅是個好主意。在這種情況下,資產是數據庫中的敏感數據(如果數據不重要,那為什麼還要用密碼保護它?),威脅是攻擊者可能以某種方式獲得對 Web.config 的訪問權限,從而訪問數據庫也是。一種可能的緩解方法是在 Web.config 中加密數據庫密碼。
有多大的風險?我們真的必須為這種天文數字般罕見的事件做好計劃嗎?
這種緩解已經一次證明了它的價值:當發現 ASP.NET padding oracle 漏洞時。任何在 Web.config 中儲存明文密碼的人都處於危險之中;任何加密密碼的人都不是。您有多大把握在未來幾年內不會發現 ASP.NET 中的另一個類似漏洞?
我們是否還應該加密原始碼並在執行時解密?對我來說似乎太過分了。
那麼,如果攻擊者確實可以訪問您的原始碼怎麼辦?您要保護的資產是什麼,您擔心的威脅是什麼?我認為在很多情況下,原始碼的價值遠低於數據。(我在這裡考慮的是任何人都可以獲得的現成的商業和開源軟體。)如果您的原始碼很有價值,那麼可能需要考慮混淆。
我覺得如果他們已經對您的盒子進行了有限的訪問,那麼您的主機已經失敗或者您已經安裝了易受攻擊的服務。
ASP.NET 或您的程式碼中的安全漏洞怎麼樣?它們確實不時彈出。
我關心的是標準做法。是標準嗎?
Microsoft建議對連接字元串進行加密。
您應該做的是評估儲存明文密碼帶來的風險:
- 攻擊者能夠發現和利用暴露 Web.config 的安全漏洞的可能性有多大?根據過去的歷史,我會說可能性很低(但不是“天文數字”低)。
- 您的數據有多有價值或有多敏感?如果您儲存的只是貓的照片,那麼攻擊者是否獲得您的數據庫密碼可能並不重要。但是,如果您要儲存個人身份資訊,那麼從法律的角度來看,我會說您應該採取一切可能的措施來保護您的應用程序,包括加密您的連接字元串。