我想知道你用什麼技術爲你的應用程序存儲數據庫憑證。我特別關心java webapps,但我不認爲有必要限制這些問題。將數據庫憑據存儲在Web應用程序中的位置?
需要考慮的事項:
您是否使用屬性文件,xml configs,other?
它被捆綁到您的應用程序(即在一個jar文件中)或單獨存儲在文件系統的某個地方?
密碼是否加密?如果是這樣,你使用什麼加密方案?
我想知道你用什麼技術爲你的應用程序存儲數據庫憑證。我特別關心java webapps,但我不認爲有必要限制這些問題。將數據庫憑據存儲在Web應用程序中的位置?
需要考慮的事項:
您是否使用屬性文件,xml configs,other?
它被捆綁到您的應用程序(即在一個jar文件中)或單獨存儲在文件系統的某個地方?
密碼是否加密?如果是這樣,你使用什麼加密方案?
對於Java,數據庫連接池應該由容器傳遞給webapps。這是作爲資源在WEB-INF/web.xml中聲明的標準。這同樣適用於郵件會話和可能因安裝而異的其他外部資源。查看JNDI以獲得更多關於此的信息)
與此相關的好處是應用程序不關心如何實際連接到任何外部。它不會看到任何密碼,因爲容器本身會使用它們。
在tomcat中,這是通過conf/Catalina/localhost /,conf/server.xml中的上下文文件(或僅適用於開發環境)從webapps META-INF/context.xml配置的。其他環境有自己的配置位置或應用程序。
密碼的加密實際上取決於容器。 Tomcat以明文形式存儲它們,但應用程序本身不會看到它。我不瞭解其他環境中的機制。
取決於應用服務器。
我通常對數據源使用JNDI查找,因此憑據存儲在處理連接池的應用服務器上。無需在配置中添加JNDI名稱以外的任何其他內容。
是的,密碼在WebLogic上加密。
在Tomcat上的東西可能是冒險的。連接信息在META-INF/context.xml中,表示密碼的純文本。我只是爲了發展而做,而不是在生產。
由於您將問題留給平臺,我將添加.NET應用程序的數據庫憑據存儲在web.config文件中。從版本2.0及以上版本開始,有一個特定的ConnectionStrings部分,可以更方便地編程訪問連接字符串。
除了讓IIS自動阻止對web.config文件的直接請求,您還可以使用IIS命令來加密web.config文件的ConnectionString部分。這種加密方式是特定於計算機的,增加了它的優勢,.NET運行時也會在您訪問它時動態地解密連接字符串,因此您的應用程序不需要額外的編碼來處理它。
在Microsoft堆棧上,事情可以非常好。
您在Active Directory中創建網絡用戶帳戶幾乎沒有權限。您將IIS配置爲以該用戶身份運行您的Web應用程序。您授予該用戶讀取磁盤上的Web文件夾和文件的權限。您將SQL Server配置爲授予該用戶對所需表的讀/寫權限。並且在連接字符串中,您指示db客戶端以當前運行web應用程序的用戶帳戶連接。
儘管在多個地方可見,但只有一個實際用戶帳戶。此用戶帳戶的權限非常有限。即使加密,也無法在任何地方存儲密碼。沒有配置必須在代碼中完成才能工作(這完全在設置權限中)。
在Django中,憑證位於您的settings.py
配置文件中。由於這通常不在您的/var/www/
目錄樹中,因此它非常安全。
而且,單一Django應用程序可以使用(再利用)爲同一主機上的許多網站或Web服務器,每個都有它自己獨特的設置。因此settings.py
配置不與應用程序捆綁在一起,而是應用程序的單個部署的一部分。
對於asp.net:
我存儲的全局參數,如連接字符串,並在註冊表中的版本庫路徑,然後在web.config中的註冊表項的參考。
主要的原因是,我經常發現我必須寫一個獨立的可執行文件運行後臺任務和需要訪問相同的參數等自動化功能。因此,在一個易於到達的地方保持真正的全球化,讓生活更輕鬆。
以下哪些是保持您的Web應用程序數據庫憑據的好地方? 在您的源代碼中的單獨文件中 在您的Web服務器主機上的單獨文件中 在您的數據庫中 無。數據庫憑證永遠不會存儲
那麼,如果服務器上沒有帶有憑證的文件,應用程序如何連接到數據庫? – thenetimp 2017-09-20 13:36:32