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

问题描述 投票:27回答:4

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

<appSettings>
    <add key="ApiURL" value="https://...../servlets/AssetServlet" />
    <add key="ApiUserName" value="tmsservice" />
    <add key="ApiPassword" value="test2test2" /> 

然后,我的操作方法中,我将构建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的用户名和密码?

c# asp.net asp.net-mvc iis web-config
4个回答
13
投票

一般情况下,web.config文件是一个安全的文件,IIS不服务于它,所以它不会被暴露于谁正在请求的Web服务器的用户。 Web服务器仅提供特定类型的文件和web.config中是肯定不会的“时间之一。

很多时候,您保存您的数据库连接字符串中也包括密码。现在想象一个场景的web.config是不安全的。您已经创建了您的应用的主要安全威胁。

因此,只要专门为您的项目是不是太大了,你不应该担心。

然而,你可能有一个更好的办法,但创建一个名为“资源”项目和所有关键信息保存,如设置,consts,枚举和等在那里。这将是一个漂亮的和有组织的方式。

如果你虽然越过线的用户名/密码(例如,在一个安全的API调用的情况下),你可能需要使用HTTPS确保所传播的信息是加密的,但有无关的安全性web.config文件。


24
投票

你可以encrypt the web.config with aspnet_regiis。这是为了阻止访问您的服务器用户读取敏感信息。

顺便说一句,我会把你的配置设置的类,然后可以注入到你的控制器内部 - 这将使得单元测试更容易。


3
投票

在web.config文件只是文件系统上的文件,所以你应该(大部分)以同样的方式,就像任何其他文件考虑其安全性。它不会被IIS送达(除非你做一个坦白疯狂的配置变化到IIS - 易于检查,只要尝试与浏览器请求的话)

这是确保你的网站目录中的良好做法:用普通的windows文件(C /网站/我的站点,在这里或其他)使用文件夹的权限,只是在网站应用程序域用户读取文件(如果需要部署用户)权限

因此,它可能不是必要的,如果你在Web服务器安全的信心来加密。然而,如果你在共享主机,或出售该网站的代码,或源代码是公开说的话,那可能是明智的加密。这是一个有点麻烦,虽然一些。


2
投票

为什么要使用的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和相应的数据与每个版本以提高安全性。

© www.soinside.com 2019 - 2024. All rights reserved.