在单声道中加密web.config的配置部分

时间:2009-03-12 15:21:41

标签: c# .net encryption mono

我看到可以使用ASP_regiis加密web.config文件的各个部分,但我在使用Apache的盒子上运行mono。有没有办法在Mono / Linux中执行此操作?

2 个答案:

答案 0 :(得分:0)

您可以使用System.Configuration.ConfigurationManager以编程方式执行此操作以获取ConfigurationSection对象并在其上调用SectionInformation.ProtecteSection(“DataProtectionConfigurationProvider”)

    /// <summary>
    /// Encrypts a Config section from the given Configuration object
    /// </summary>
    /// <param name="sectionKey">Path to the section to Encrypt</param>
    /// <param name="config">Configuration</param>
    public static void EncryptConfigSection(String sectionKey, Configuration config)
    {
        ConfigurationSection section = config.GetSection(sectionKey);
        if (section != null)
        {
            if (!section.SectionInformation.IsProtected)
            {
                if (!section.ElementInformation.IsLocked)
                {
                    section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
                    section.SectionInformation.ForceSave = true;
                    config.Save(ConfigurationSaveMode.Full);
                }
            }
        }
    }

对于Web配置,您需要使用System.Web.Configuration.WebConfigurationManager来获取可以传递给上述函数的Configuration对象。请注意,对于web.config文件,只有某些部分是可加密的。

另请注意,如果设置存储在AppSettings中,那么任何人都可以编写一个简单的应用程序,该服务器在您的服务器上运行时可以检索设置的纯文本值,前提是他们知道您的设置名称。

查看Jon Galloway关于简单加密AppSettings部分的替代方案的以下文章:http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config-file.aspx

答案 1 :(得分:-2)

除非我弄错了,否则IIS不会提供Web.Config文件。如果你担心人们会从网上下载它,我相信你可以阻止这个文件来自Apache服务。

如果你在谈论本地安全,我认为没有“好”的方法来做到这一点。假设您的Web中有密码。配置正确加密的唯一方法是需要另一个密码来解密文件。所以从本质上讲,因为(我假设)你需要以编程方式访问文件,你只需要移动存储密码的地方,从Web.Config到源代码或另一个外部文件,这对你来说真的没有任何帮助。所有其他不需要密码解密的加密方法只会使文件模糊不清,但很容易被遮挡。

阅读Pidgin(以前称为gaim)本地存储密码的文章http://developer.pidgin.im/wiki/PlainTextPasswords。此外,this维基百科关于加密密钥的文章可能很有用。两者都讨论了security through obscurity的内在局限性。

基本上,如果您在本地锁定文件,请使用基于用户帐户的安全性来执行此操作,即限制对文件的读/写访问权限。