我看到可以使用ASP_regiis加密web.config文件的各个部分,但我在使用Apache的盒子上运行mono。有没有办法在Mono / Linux中执行此操作?
答案 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的内在局限性。
基本上,如果您在本地锁定文件,请使用基于用户帐户的安全性来执行此操作,即限制对文件的读/写访问权限。