[英]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.