【问题标题】:Securing database connection strings保护数据库连接字符串
【发布时间】:2013-05-26 14:05:51
【问题描述】:

我正在寻找一些与存储和保护数据库连接字符串相关的建议和最佳实践建议。 App.config 似乎是 Microsoft 首选的处理应用程序配置的方式,但我在过去使用它时遇到了一些麻烦 - 或者我只是不理解其背后的理念。

对我来说似乎很明显的第一件事是:永远不要以明文形式存储连接信息。但是,App.config 始终是纯文本的。避免在 App.config 中存储人类可读信息的唯一方法似乎是Protected Configuration。 但同样重要的是:如果确实部署了应用程序,则配置将以明文形式部署 - 加密(无需某些工具的帮助)似乎只有在应用程序首次启动时才有可能。

这对我来说似乎不安全,因为如果有人在第一次运行应用程序之前检查应用程序目录(存储配置的位置),他会收到很多纯文本的敏感信息。

另外:如何保护以非特权默认用户身份运行的应用程序中的配置? AFAIK 保存应用程序设置需要管理员权限。

微软真的考虑过吗?还是微软提供了不同的方式?

【问题讨论】:

  • @varun 乍一看似乎很有希望,但我不明白这如何与简单的客户端 Windows 应用程序一起工作。我是否必须在安装期间为使用该应用程序的每个用户加密数据?
  • 它真的取决于你,你可以为一个 rsa 组件保留相同的密钥,它将解密所有敏感数据,但是你为什么要加密一些敏感的东西,每个 clinet 都会有所不同但必须编写在配置文件中,在这种情况下,您应该让用户在 UI/admin 部分输入这些内容并将整个内容保存为加密文件。如果有的话,也许可以使用他的登录凭据来加密它

标签: c# .net database security configuration


【解决方案1】:

您可以轻松加密 web.config 中的配置部分,

看起来像这样

<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
    <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
      xmlns="http://www.w3.org/2001/04/xmlenc#">
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
          <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <KeyName>Rsa Key</KeyName>
          </KeyInfo>
          <CipherData>
            <CipherValue>R7cyuRk+SXJoimz7wlOpJr/YLeADGnwJVcmElHbrG/B5dDTE4C9rzSmmTsbJ9Xcl2oDQt1qYma9L7pzQsQQYqLrkajqJ4i6ZQH1cmiot8ja7Vh+yItes7TRU1AoXN9T0mbX5H1Axm0O3X/285/MdXXTUlPkDMAZXmzNVeEJHSCE=</CipherValue>
          </CipherData>
        </EncryptedKey>
      </KeyInfo>
      <CipherData>
        <CipherValue>d2++QtjcVwIkJLsye+dNJbCveORxeWiVSJIbcQQqAFofhay1wMci8FFlbQWttiRYFcvxrmVfNSxoZV8GjfPtppiodhOzQZ+0/QIFiU9Cifqh/T/7JyFkFSn13bTKjbYmHObKAzZ+Eg6gCXBxsVErzH9GRphlsz5ru1BytFYxo/lUGRvZfpLHLYWRuFyLXnxNoAGfL1mpQM7M46x5YWRMsNsNEKTo/PU9/Jvnh/lT+GlcgCs2JRpyzSfKE7zSJH+TpIRtd86PwQ5HG3Pd2frYdYw0rmlmlI9D</CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>

看看here > 你不需要工具来解密它,这可以很容易地在代码中完成并且是一种常见的做法。

【讨论】:

  • 如前所述,如果我部署应用程序,配置将不会被加密。或者,如果它将绑定到未存储在目标计算机上的密钥。所以我假设我必须在应用程序安装后执行此操作,但 Microsoft 似乎没有为此提供任何工具,而且我对为在 WiX 中运行它的每个项目编写自定义操作代码不感兴趣。令人失望的是,微软为开发人员提供了非常棒的工具来创建应用程序,但在部署方面却完全糟糕。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 2013-08-30
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2010-10-20
相关资源
最近更新 更多