【问题标题】:Encrypting Connection String in web.config在 web.config 中加密连接字符串
【发布时间】:2010-12-14 23:08:54
【问题描述】:

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

【问题讨论】:

    标签: .net asp.net encryption web-config


    【解决方案1】:

    为了避免访问外部链接,在 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工具有什么好处?!
    • 这真的取决于你为什么要加密文件 - 如果它是用于开发并且你的开发机器上没有任何敏感信息,那么我认为没有什么意义(除了用于测试),但是在存在可能被黑客入侵的敏感信息的实时服务器或机器上......那么你就有好处了
    • 有另一个提供者RsaProtectedConfigurationProvider
    • 一个稍微修改过的版本对我有用。我使用的是 web.config 文件的路径,并使用了以下内容: aspnet_regiis -pef "connectionStrings" "PATH_TO_DIRECTORY" 使用相同,但使用 -pdf 进行解密步骤。
    【解决方案2】:

    Rahul,将字符串从 ASCII 转换为 base64 字符串不是加密,这是您的第一个链接所建议的。我们可以轻松地将 base64 转换为 ASCII。

    将 configsection.protectSection() 与 RSA 密钥一起使用是一种可用于 Web.config 文件部分的适当加密。

    查看此链接:http://www.beansoftware.com/ASP.NET-Tutorials/Encrypting-Connection-String.aspx

    请注意,我们无法在信任级别设置为中等信任的共享主机环境中加密 Web.config 文件。

    【讨论】:

      【解决方案3】:
      【解决方案4】:

      在命令中运行: 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;
                      }
                  }
      

      【讨论】:

        【解决方案5】:

        加密有助于为应用程序提供安全性。请找到以下步骤来加密 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>
        

        【讨论】:

        【解决方案6】:

        我用源代码在 Windows 窗体中创建了一个实用程序。

        从这里下载文件(它的整个项目,你可以从 bin 文件夹中运行它):File

        1. 从调试文件夹运行可执行文件(以管理员身份运行
        2. 浏览配置文件
        3. 你完成了

        注意:检查您的计算机中是否存在此文件夹:

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

        这里是Check Gist Here 的文件的偷偷摸摸

        【讨论】:

        • 很棒的工具,但它加密了 webconfig,而不是调试或发布,我会尝试破解你在 zip (y) 中发布的源代码
        【解决方案7】:

        ASPNET_REGIIS,正如其他人所说。

        但请记住,在考虑编码的强度和要求时,RSA 并不是万无一失的,甚至不是很强大。打破它需要几分钟。

        我的情况是,我必须使用 SQL 服务器身份验证连接到其中一台 SQL 服务器,而这又需要在连接字符串中以纯文本形式写入密码。

        文件中的纯文本密码是错误的。更好的 RSA 编码。因此,当有人看着它并不想真正闯入它时,他看不到密码。

        但是,它位于只能从域内访问的服务器上,这将可能的攻击者限制在 100 个以下,其他任何人都必须先闯入域,如果发生这种情况,连接到测试环境数据库服务器是最少的问题。此外,在这 100 人中,只有大约 5 人拥有管理员权限,从而有权使用 ASPNET_REGIIS 彻底解密文件。

        无论如何,你必须相信这些。对于所有其他人来说,他们可以获得的数据价值远低于他们为获得数据而必须付出的工作。也不值得冒着不再是雇员的风险。

        而且,他们大多甚至不知道这东西有可能被闯入。而现在,即使他们以某种方式发现了,他们也不会在没有任何工作的情况下获得纯文本密码。

        【讨论】:

          猜你喜欢
          • 2012-06-18
          • 2011-06-21
          • 1970-01-01
          • 1970-01-01
          • 2012-05-31
          • 2011-08-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多