簡體   English   中英

我應該如何在源代碼管理中處理項目中的秘密值?

[英]How should I handle secret values in a project in source control?

我的問題與問題基本相同,但對於Windows應用商店應用程序,c#和Visual Studio。 我想有一個簡單的方法來保存項目中的秘密值,在一個可以在(未簽入)源代碼控制中忽略的文件中。 我應該如何構建我的項目來存儲應用程序機密,使構建/源代碼控制變得容易?

我的第一個想法是將它存儲在XML文件中(未簽入),並在運行時加載它,但這使得安裝它的用戶可以使用它,因此它應該在構建時完成。 在構建項目時,如何存儲一些秘密值並讓visual studio在我的代碼中替換它們?

在我的公司,我們決定為您提供以下解決方案 在配置文件中,我們在外部配置中鏈接具有“秘密”值的部分。 外部配置是源控制。 首先它不是,但是在我們的構建服務器丟失磁盤出現問題之后,我們認為將它存儲在有備份的地方更安全。 源代碼管理中的文件夾(也可以在文件服務器上)實際上僅限於只對需要此內容的人進行讀寫。 構建流程簽出“項目”文件夾加“配置”文件夾並進行構建。 構建“配置”文件夾后刪除。 對構建服務器的訪問也受到限制。

一種選擇是將秘密存儲在源代碼管理中,但以加密形式存儲它們。 在開發或構建環境中,使用環境變量來存儲密鑰,並即時解密。 這樣您就可以在保持信息安全的同時獲得源代碼控制的好處。

即使您使用的是app.config或web.config,也可以執行此操作,只需在啟動時從代碼修改配置即可。

埃里克

更新
如果您在不受信任的區域(例如公共源控制)中存放秘密,則它很容易受到攻擊。 即使它是加密的,也可以通過足夠的努力來檢索。

真正讓它無法觸及的唯一方法是擁有一個與第三方API交互的外部服務。 這有其自身的權衡(例如您在評論中提到的用戶身份驗證)。 特別是如果您的開發人員在測試時需要使用第三方API,我認為沒有其他選擇會限制秘密的曝光。

在項目中創建一個新的類文件,該文件包含所有秘密值的插槽,並為所有這些值保存虛擬/測試值。 檢查它與項目的其余部分進入源代碼控制,以便任何構建它而無法訪問機密的人將獲得某種測試版本。

然后,使用真實的機密值創建該類文件的副本,並將其放在源代碼控制之外的某個位置。 在預構建事件中編寫批處理腳本以查找此類文件,如果找到,則用它替換項目中包含的虛擬文件。

這樣,您的項目仍然可以在源代碼控制中,任何人都可以檢查它,構建它,並在測試模式下運行它。 您的秘密文件/值僅存儲在構建服務器上,因此只有在構建項目時才會有實際值。

記得在某個地方備份你的秘密文件。 並且還記得.NET代碼可以很容易地被反編譯,所以你的秘密可能不像你希望的那樣秘密 - 任何擁有.NET反射器的用戶都可以看到你的發布程序集中的所有代碼,包括你的秘密類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM