【发布时间】:2010-12-14 23:08:54
【问题描述】:
如何加密 web.config 文件中的连接字符串部分?
【问题讨论】:
标签: .net asp.net encryption web-config
如何加密 web.config 文件中的连接字符串部分?
【问题讨论】:
标签: .net asp.net encryption web-config
为了避免访问外部链接,在 C:\Windows\Microsoft.NET\Framework\v4.0.30319(适用于 .NET 4 / 4.5)中
aspnet_regiis.exe -pe "connectionStrings" -app "/YourWebSiteName" -prov "DataProtectionConfigurationProvider"
要使用此工具解密 connectionStrings 部分,您可以在 aspnet_iisreg.exe 工具中指定以下命令。
aspnet_regiis.exe -pd "connectionStrings" -app "/YouWebSiteName"
【讨论】:
RsaProtectedConfigurationProvider
Rahul,将字符串从 ASCII 转换为 base64 字符串不是加密,这是您的第一个链接所建议的。我们可以轻松地将 base64 转换为 ASCII。
将 configsection.protectSection() 与 RSA 密钥一起使用是一种可用于 Web.config 文件部分的适当加密。
查看此链接:http://www.beansoftware.com/ASP.NET-Tutorials/Encrypting-Connection-String.aspx
请注意,我们无法在信任级别设置为中等信任的共享主机环境中加密 Web.config 文件。
【讨论】:
在命令中运行: aspnet_regiis.exe -pef "connectionStrings" "pathToWebConfig"
或者,如果您希望它以编程方式运行,您可以创建一个进程:
string fileName = @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe";
if (8 == IntPtr.Size
|| (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
fileName = @"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe";
string arguments = $"-pef \"connectionStrings\" \"{application.Path}\"";
using (Process process = new Process())
{
process.EnableRaisingEvents = true;
process.StartInfo = new ProcessStartInfo
{
FileName = exeName,
Arguments = arguments,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
};
process.Start();
processOutput.Output = process.StandardOutput.ReadToEnd();
bool exited = process.WaitForExit(timeoutMilliseconds);
if (exited)
{
processOutput.ExitCode = process.ExitCode;
}
}
【讨论】:
加密有助于为应用程序提供安全性。请找到以下步骤来加密 web.config。
为了提高安全性,我使用了其他东西。在我的 Web.config 中,我添加了以下代码。
<httpProtocol>
<customHeaders>
<add name="x-Frame-Option" value="Deny or SEMEORGIN" />
<remove name="Server" />
<remove name="X-AspNet-Version" />
<remove name="X-AspNetMvc-Version" />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
【讨论】:
我用源代码在 Windows 窗体中创建了一个实用程序。
从这里下载文件(它的整个项目,你可以从 bin 文件夹中运行它):File
注意:检查您的计算机中是否存在此文件夹:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\
这里是Check Gist Here 的文件的偷偷摸摸
【讨论】:
ASPNET_REGIIS,正如其他人所说。
但请记住,在考虑编码的强度和要求时,RSA 并不是万无一失的,甚至不是很强大。打破它需要几分钟。
我的情况是,我必须使用 SQL 服务器身份验证连接到其中一台 SQL 服务器,而这又需要在连接字符串中以纯文本形式写入密码。
文件中的纯文本密码是错误的。更好的 RSA 编码。因此,当有人看着它并不想真正闯入它时,他看不到密码。
但是,它位于只能从域内访问的服务器上,这将可能的攻击者限制在 100 个以下,其他任何人都必须先闯入域,如果发生这种情况,连接到测试环境数据库服务器是最少的问题。此外,在这 100 人中,只有大约 5 人拥有管理员权限,从而有权使用 ASPNET_REGIIS 彻底解密文件。
无论如何,你必须相信这些。对于所有其他人来说,他们可以获得的数据价值远低于他们为获得数据而必须付出的工作。也不值得冒着不再是雇员的风险。
而且,他们大多甚至不知道这东西有可能被闯入。而现在,即使他们以某种方式发现了,他们也不会在没有任何工作的情况下获得纯文本密码。
【讨论】: