2011-04-25 106 views
6

我正在考慮在Github上爲我的實時網站開源代碼。到目前爲止,我一直在將代碼存儲在一個專用的repo中,我唯一擔心的是有一些與我的生產環境(DB密碼,API密鑰等)有關的配置文件,我不想公開可見。開源項目:如何處理私有/祕密配置數據?

在不暴露私人數據的情況下開放這些項目的典型方法是什麼?你是否僅僅維護兩個回購公司,一個是公共的,一個是私人數據庫,兩者之間偶爾會合並?

回答

7

對於Git,我建議您將規則添加到您的.gitignore以忽略包含敏感信息的文件(適用於Mercurial的.hgignore)。儘量將敏感信息保留在一個地方(例如設置文件)。如果你使用的是web框架,這個信息通常在一個文件中(例如,在Django中,有一個包含數據庫信息,密鑰等的settings.py文件)。如果你的應用程序的各個部分都有敏感信息,將這些信息放入某種配置文件或對象中。

如果您希望人們仍然知道數據來自何處,請將包含假數據的示例或虛擬文件與某處的註釋(文件或自述文件中的某個註釋)包含在一起,以使該文件必須更改。然後您可以命名該文件,例如,settings.py.example並忽略真實的settings.py

保持多次回購是一個壞主意。只保留敏感數據,並確保您明確表示它缺失,缺少什麼,這樣人們仍然可以重複使用您的工作。

+1

一些很好的信息,謝謝。但是,該網站將保持活動並定期更新,因此該私人配置數據需要可用,以便網站繼續工作。換句話說,配置數據需要存儲在某處*。我很想避免第二次回購,但我不確定我有什麼其他選擇。 – 2011-04-25 04:53:02

+0

有人可以指出任何有這方面好例子的項目嗎? – 2012-04-16 11:25:32

0

從邏輯上講,有真的只有兩件事情可以做,但不透露你的敏感信息:

  1. 沒有把信息納入公共VCS可言。
  2. 以密碼安全的方式將信息放入VCS中。

我個人不希望複製存儲庫,如果您需要直接從VCS進行部署,那麼您幾乎只剩下選項2.顯然,它將取決於您的框架,但以.NET爲例,我會確保您的連接字符串和API密鑰存儲在web.config中,然後正確加密(我在OWASP Top 10 for .NET developers part 6: Security Misconfiguration的「加密敏感配置數據」部分中討論了這一點)。

通過這種方法,您可以將所需的信息放入配置文件中,以便它可以在發生加密的機器上成功執行,但不會在別處執行。嘗試在另一臺機器上運行應用程序,由於鍵的不同,會拋出異常。