2016-06-24 86 views
3

我們正在開發ASP.NET MVC 5應用程序。我們聘請了一些遠程開發人員來幫助我們完成這個項目。保護web.config設置

web.config文件包含我們不想與這些遠程開發人員共享的連接字符串和應用程序設置。爲了處理我們的應用程序,這些開發人員可以遠程訪問我們控制的開發桌面。

什麼是固定在web.config中的敏感信息的最佳實踐,從而使開發人員仍然可以運行和調試應用程序,但不能讀取web.config中的敏感信息?

+2

我最近面對的東西與此非常相似。如果您的應用程序位於遠程用戶的中央服務器上,則可以使用aspnet_regiis使用計算機級別密鑰進行web.config加密。 [MSDN aspnet_regiis](https://msdn.microsoft.com/en-us/library/zhhddkxy.aspx)。 但值得注意的是,您仍然可以通過使用WebConfigurationManager調用這些值來獲取這些值。 – Ingenioushax

+0

謝謝,但我想如果我們處理類似保護API密鑰的東西,那麼仍然無法保護該密鑰,因爲API期望它以「清晰」形式傳遞,所以開發人員只需將在正確的地方看到鑰匙的斷點... – user1044169

+4

如果你不相信開發者,你爲什麼聘用他們? –

回答

3

在開發環境中加密web.config是沒有意義的。真正將開發人員的信息隱藏起來的唯一方法不是首先將其提供給他們。

  1. 您必須確保您的「遠程開發環境」僅用於訪問開發數據庫,​​並且僅配置了其他開發設置。
  2. 請勿將任何敏感數據(生產密碼等)存入您的源代碼管理。您可以通過將信息分離爲external .config files來實現此目的,以便它們不會被簽入源代碼管理。 提示:Ignore the file with the actual passwords並添加另一個具有相同的名稱和擴展名,如.config.example檢查中給予的開發者說明如何設置文件在本地系統(這是一個有益的提醒,無論從源代碼控制庫的克隆中設置系統)。
  3. 使用持續集成服務器(TeamCity,Jenkins,Octopus Deploy等)通過環境變量將敏感信息構建到發佈工作流程中。許多CI服務器有能力hide sensitive data from the UI。您可以通過CI按鈕單擊練習自動部署,以便開發人員無法訪問CI服務器中的敏感數據,也可以將部署工件交給受信任的團隊進行生產安裝。

真的沒有理由讓開發者甚至有機會看到敏感的生產數據,例如密碼和私鑰。

0

您可以存儲配置變量中的環境變量,並在運行時他們讀入的應用程序 - 這是更好,因爲每個開發人員和環境都可以有自己的configs將從未與他人發生衝突。

+0

因此,如果我將連接密碼存儲在環境變量中,會阻止不受信任的開發人員看到該變量?就像在Powershell中一樣,它的get-childitem env: – user1044169

+0

這個(以及其他任何事情)都不會真正起作用,開發人員可以調試,放置斷點,觀看等,他們可以完全控制內存空間。 – Fredou

+0

所以你共享一臺機器? – iwayneo

1

你如何部署你的應用程序?

如果您使用的工具,如Octopus Deploy - 只有你的團隊陸上訪問 - 你可以用它來存儲任何敏感的設置。這些將在部署期間插入到您的配置文件中。

在章魚部署這些公知爲configuration variables

這假定敏感設置是針對環境其他而不是開發人員自己使用的(例如Production和UAT)。

2

Ingenioushax建議,web.config中的部分使用ASPNET_REGIIS加密的標準方式。 Here is a tutorial