在web.config中加密连接字符串

33

如何加密web.config文件中的连接字符串部分?

8个回答

12

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文件。


12

为了避免访问外部链接,在 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工具的优势是什么?当加密文件仅可在本地计算机中使用且无法在托管服务器上使用时,该工具有何用处? - Sepehr Estaki
这真的取决于你为什么想要加密文件 - 如果是为了开发,并且您的开发机器上没有任何敏感信息,那么我认为除了测试之外没有太多意义,但是在一个实际运行的服务器或者存在可能被黑客攻击的敏感信息的机器上,那么加密就有好处了。 - Martin Ernst
还有另一个提供程序名为 RsaProtectedConfigurationProvider - NoughT
1
稍作修改后,这个方法对我有效。我使用了web.config文件的路径,并使用了以下命令:aspnet_regiis -pef "connectionStrings" "PATH_TO_DIRECTORY"。解密步骤也是一样的,只需将-pef替换为-pdf即可。 - Kevin


3

在命令行中运行以下代码:

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;
                }
            }

1

加密对应用程序的安全性非常有用。请按照以下步骤加密 web.config。

  1. 以管理员权限打开命令提示符
  2. 在命令提示符中输入
  3. cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
  4. 如果您的 Web Config 位于“D:\Articles\EncryptWebConfig”目录路径中,请输入以下内容以加密 ConnectionString:
  5. ASPNET_REGIIS -pef "connectionStrings" "D:\Articles\EncryptWebConfig

我为了更安全使用了一些其他东西。在我的 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>

1
嗯...看起来很像我刚刚在这里阅读的一篇文章(来自2014年)https://www.codeproject.com/Tips/795135/Encrypt-ConnectionString-in-Web-Config - Chris Catignani

1
我已经创建了一个带源代码的Windows窗体实用程序。
从这里下载文件(整个项目,您可以从bin文件夹中运行它):File
  1. 从debug文件夹运行可执行文件(以管理员身份运行)
  2. 浏览配置文件
  3. 完成
注意:请检查您的计算机上是否存在此文件夹。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\

这是一个文件的预览,你可以在这里查看Gist


很棒的工具,但它加密了webconfig,而不是debug或release,我将尝试破解您在zip中发布的源代码 (y) - shareef

0

ASPNET_REGIIS,正如其他人所说。

但是请记住,在考虑编码的强度和要求时,RSA并不是绝对可靠的,甚至不是非常强大的。破解它只需要几分钟。

我的情况是,我必须使用SQL服务器身份验证之一连接到SQL服务器之一,这反过来又需要在连接字符串中以明文形式编写密码。

文件中的明文密码是错误的。最好使用RSA编码。因此,当有人查看它并且实际上不想破解它时,他不会看到密码。

但是,它仅限于仅从域内访问的服务器,这将攻击者的可能性限制在不到100个人以下,其他任何人都必须首先闯入该域,如果发生这种情况,则连接到测试环境DB服务器是最小的问题。此外,在这100个人中,只有约5个具有管理员特权,这使得他们有权使用ASPNET_REGIIS干净地解密文件。

无论如何,您必须信任这些人。对于所有其他人而言,他们可以获得的数据价值远远低于他们必须付出的工作量。这不值得冒失失去员工身份的风险。

此外,他们大多数人甚至不知道这个东西可以被破解。即使他们现在知道了,也不会轻易得到明文密码而不费任何力气。

0

如果您无法访问命令提示符,这对于大多数使用第三方托管提供商托管网站的网站所有者来说是一个常见情况。您可以参考以下文章-

https://www.dbdocs.net/asp/encrypt-the-connection-string-in-asp-net-web-config

这种方法非常灵活,可以在本地系统和Web服务器环境中使用,即使您没有直接访问具有管理员权限的命令提示符也可以。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接