【问题标题】:How do I securely hide database credential in C# application?如何在 C# 应用程序中安全地隐藏数据库凭据?
【发布时间】:2009-11-05 01:14:59
【问题描述】:

我有一个用户在 C# 应用程序中访问远程 MySQL 服务器的情况。

基本上,

在他/她的桌面上使用 C# 应用程序的用户 ->>>> 连接到远程 ->>>>>>>> [ REMOTE ]

如何安全地隐藏数据库连接详细信息?

我的想法很少,但我认为它们不安全。

  1. 将数据库连接数据加密成一个文件并存储在应用程序目录中。
  2. 提示登录页面并让人工输入用户名/密码,然后将数据库连接数据传输到用户的计算机。

【问题讨论】:

  • 您的威胁模型未完全指定。您是否试图向用户或其他坏人隐藏这些数据?如果是后者,那么坏人是否可以访问用户的机器?
  • @Keith Randall // 实际上,两者都是因为用户有时会变成坏用户。

标签: c# mysql


【解决方案1】:

如果凭据最终以明文形式出现在应用程序中,那么无论您做什么,您都容易受到攻击。

要么在数据库前面实现一个服务层,要么如果直接连接是必不可少的,请尝试提出一个方案,允许每个用户拥有一个唯一的数据库帐户,然后在数据库上适当地授权他们。

【讨论】:

    【解决方案2】:

    通常,最好向用户询问凭据,以便管理员可以启用或禁用每个帐户。除此之外,还有用于加密全部或部分配置文件的 API。这是一篇示例文章:

    http://www.codeproject.com/KB/dotnet/EncryptingTheAppConfig.aspx

    【讨论】:

    • +1 使用带有加密连接字符串的 system.configuration.configurationmanager。或独特的凭据。
    【解决方案3】:

    我会建议基于用户凭据的某种形式的会话管理。这可以通过多种方式实现。

    例如,您可以通过简单地使用后端系统包装您的数据库访问来完成此操作。您的桌面客户端不知道数据库,只与后端系统交互。不幸的是,如果您必须从头开始,实现这种间接级别并非易事,但它肯定会使您的应用程序更加健壮和灵活。 WCF 服务可以帮助实现这一点。

    【讨论】:

    • 我错过了 sipwiz 的回答。和这个差不多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2019-09-22
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多