如何加密web.config文件中的连接字符串部分?
Rahul,将字符串从ASCII转换为base64字符串并不是一种加密方式,这正是你第一个链接所建议的。我们可以轻松地将base64转换为ASCII。
使用configsection.protectSection()和RSA密钥对Web.config文件的部分进行正确的加密。
请查看此链接:http://www.beansoftware.com/ASP.NET-Tutorials/Encrypting-Connection-String.aspx
请注意,在共享托管环境中,Trust level设置为中间信任时,我们无法加密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"
在命令行中运行以下代码:
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>
ASPNET_REGIIS,正如其他人所说。
但是请记住,在考虑编码的强度和要求时,RSA并不是绝对可靠的,甚至不是非常强大的。破解它只需要几分钟。
我的情况是,我必须使用SQL服务器身份验证之一连接到SQL服务器之一,这反过来又需要在连接字符串中以明文形式编写密码。
文件中的明文密码是错误的。最好使用RSA编码。因此,当有人查看它并且实际上不想破解它时,他不会看到密码。
但是,它仅限于仅从域内访问的服务器,这将攻击者的可能性限制在不到100个人以下,其他任何人都必须首先闯入该域,如果发生这种情况,则连接到测试环境DB服务器是最小的问题。此外,在这100个人中,只有约5个具有管理员特权,这使得他们有权使用ASPNET_REGIIS干净地解密文件。
无论如何,您必须信任这些人。对于所有其他人而言,他们可以获得的数据价值远远低于他们必须付出的工作量。这不值得冒失失去员工身份的风险。
此外,他们大多数人甚至不知道这个东西可以被破解。即使他们现在知道了,也不会轻易得到明文密码而不费任何力气。如果您无法访问命令提示符,这对于大多数使用第三方托管提供商托管网站的网站所有者来说是一个常见情况。您可以参考以下文章-
https://www.dbdocs.net/asp/encrypt-the-connection-string-in-asp-net-web-config
这种方法非常灵活,可以在本地系统和Web服务器环境中使用,即使您没有直接访问具有管理员权限的命令提示符也可以。
RsaProtectedConfigurationProvider
。 - NoughT