如何安全地读取asp.net root配置文件夹?

时间:2014-01-08 10:18:31

标签: asp.net security iis-7.5

我有一台运行IIS7.5的Windows Server 2008 R2计算机。该网络服务器托管不同域下的许多网站,每个网站包含几个asp.net应用程序。 由于客户的要求,对该机器的支持和开发访问受到很大限制。我想使用Microsoft.Web.Administration库在asmx web方法中查询每个应用程序的配置:

    [WebMethod(MessageName = "GetDatabases")]
    public List<Connection> GetDatabases()
    {
        List<Connection> connections = new List<Connection>();
        ServerManager sm = new ServerManager();
        foreach (Site site in sm.Sites)
        {
            foreach (Application app in site.Applications)
            {
                System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(app.Path);
                foreach (ConnectionStringSettings cs in config.ConnectionStrings.ConnectionStrings)
                {
                    try
                    {
                        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(cs.ConnectionString);
                        connections.Add(new Connection { Site = site.Name, Path = app.Path, Name = cs.Name, InitialCatalog = builder.InitialCatalog, DataSource = builder.DataSource });
                    }
                    catch
                    {
                        connections.Add(new Connection { Site = site.Name, Path = app.Path, Name = cs.Name});
                    }
                }
            }
        }
        return connections;
    }

此代码在Visual Studio中运行良好,但一旦部署到服务器,就会发生错误:

    Server was unable to process request. ---> Filename: redirection.config
    Error: Cannot read configuration file due to insufficient permissions

我研究了如何解决这个问题并找到了这个页面:

http://www.iis.net/learn/manage/configuring-security/application-pool-identities

因此,我为此Web服务创建了一个新的应用程序池,并将应用程序池标识配置为对包含redirection.config(C:\ Windows \ System32 \ inetsrv \ config)的文件夹具有只读权限。夹。 (我为文件夹而不是文件做了这个,因为似乎需要文件夹中的多个文件。)

因此,我的问题是:只要我正确地限制对Web服务的访问,这样做是否有任何安全隐患?对我来说似乎没问题,但是公开配置这些客户网站的意义可能至少可以说是职业限制!

谢谢, 欧文

编辑:只是想知道我是否说得好吗?到目前为止,没有人采取过这样的方式来回答它,所以这个编辑主要是为了碰撞它;)

2 个答案:

答案 0 :(得分:1)

我不是安全专家(所以请用一点点盐来表达我的话),但我会说没有一个硬性和快速的答案。但是,最有可能倾向于推荐反对

如果您的要求是允许支持人员查看您的不同网站使用的连接,那么我认为在一般原则中创建像这样的服务没有问题,只要您小心。

也就是说,在继续之前,你应该考虑很多事情:

  • 只需在服务器上创建安全共享,并授予您对该位置的支持/开发者RO访问权限,即可实现同样的目标吗?这可能比编写自己的服务更安全。
  • 如果您是通过网络服务进行此操作,则应该为服务添加安全性以防止未经授权的访问(我可能自己使用Windows身份验证,但这取决于您的要求)
  • 我建议您确保在本地网络之外看不到此服务:您不希望更广泛的网络上的某人能够访问此
  • 为您的服务使用SSL连接,以防止数据包嗅探器窥探您的流量并检索此敏感信息。
  • 我建议在显示之前从Connection字符串中删除敏感信息。至少,我会删除密码。任何需要密码的人都已经知道了,或者知道如何获得密码。任何不需要它的人将无法通过此工具获得它。您可能还想删除除IP的最后部分之外的所有部分,它不是真正安全,但它有助于混淆信息,使其更容易入侵。

最重要的是,您几乎肯定希望将此信息传达给管理层/客户,明确列出潜在风险,并详细说明您将采取哪些措施(如果有的话)来减轻风险。如果他们在所有这些之后签署了协议,那么责任就在于他们。

答案 1 :(得分:0)

网络服务的安全性应该是您最后一个问题,主要关注的是您是否应该通过网络服务提供这样的敏感/机密数据?

答案是肯定的。

除了安全威胁之外,执行此类操作可能会产生相当多的法律影响。即使您的客户是其服务器上运行的所有应用程序的唯一所有者,他们自己也可能无法自由决定实施此类功能,因为它可能对属于其客户的敏感数据构成威胁。因此,如果您自己计划做出这样的决定,那么您可以很好地想象其后果。

此外,由于显而易见的原因,对服务器和敏感数据(如连接字符串)的访问受到限制,并且在任何情况下都不应违反该限制。