如何保护存储在web.config中的密码?

我在web.config文件中添加了以下设置,以启动对外部系统的API调用。 所以我存储API URL +用户名+密码如下: –

    

然后在我的action方法中,我将在构建Web客户端时引用这些值,如下所示: –

 public ActionResult Create(RackJoin rj, FormCollection formValues) { XmlDocument doc = new XmlDocument(); using (var client = new WebClient()) { var query = HttpUtility.ParseQueryString(string.Empty); foreach (string key in formValues) { query[key] = this.Request.Form[key]; } query["username"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiUserName"]; query["password"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiPassword"]; string apiurl = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiURL"]; 

但在这一点上,我将公开用户名和密码,这些可以被用户捕获,所以我的问题是如何保护API用户名和密码?

通常,web.config是一个安全文件,IIS不提供它,因此它不会向向Web服务器发出请求的用户公开。 Web服务器只提供特定类型的文件,而web.config肯定不是其中之一。

通常,您将数据库连接字符串保存在其中,其中包括密码。 现在想象一下web.config不安全的场景。 您已为应用程序创建了主要的安全威胁。

因此,特别是只要你的项目不是太大,你就不应该担心它。

然而,您可能有更好的方法,但创建一个名为“资源”的项目,并保存所有关键信息,如设置,consts,枚举等。 这将是一个光滑和有组织的方法。

如果您通过网络传递用户名/密码(例如,在安全API调用的情况下),您可能希望使用https来确保正在传输的信息是加密的,但这与安全性无关web.config文件。

您可以使用aspnet_regiis加密web.config 。 这是为了阻止访问您服务器的人员阅读敏感信息。

顺便说一句,我会将您的配置设置放在一个类中,然后可以将其注入到您的控制器中 – 这将使unit testing更容易。

web.config文件只是文件系统上的一个文件,因此您应该(大多数)以与其他任何文件相同的方式考虑其安全性。 它不会由IIS提供(除非您对IIS进行了一次坦率的疯狂配置更改 – 易于检查,只需尝试使用浏览器请求它)

最好使用文件夹权限将网站目录(c:/ sites / my-site-here或其他)保护到网站应用程序域用户,以便使用普通的Windows文件读取文件(如果需要,还可以部署用户)权限

因此,如果您对Web服务器的安全性有信心,则可能没有必要进行加密。 但是,如果您说共享主机,或销售网站代码,或源代码是公开的,那么加密它可能是明智的。 虽然有点麻烦但是有些麻烦。

为什么要使用Web.config?

在Web.config中使用数据而不是将其存储在常量,枚举等中的优点之一是,您可以轻松地更改不同环境中的数据。

保护数据

保护Web.config中数据的最佳方法是加密它们。 不像Joe和user1089766所建议的那样加密配置文件中的整个部分,您只需加密密码字符串并将其存储在配置中即可。

检索数据

您可以使用辅助函数(如下面的函数)来解密密钥。

 private const readonly string decryptKey = ""; public string GetFromConfig(string key) { var encryptedText = System.Web.Configuration.WebConfigurationManager.AppSettings[key]; var plainText = Decrypt(encryptedText, decryptKey); return plainText; } 

通过这种方式,解密密钥将位于所有环境的公共项目内。 但您可以轻松更改web.config中的数据,而无需重新编译应用程序。

PS :您可以更改每个版本的decryptionKey和相应的数据,以提高安全性。