【问题标题】:Safely connect to mySQL database in c#在 c# 中安全连接到 mySQL 数据库
【发布时间】:2012-03-09 17:54:31
【问题描述】:

我对 C# 很陌生,我做了很多东西,但我缺少很多基础知识。 无论如何,我正在制作一个用户必须登录的程序,然后它会检查输入的密码是否与数据库中的密码相同。

无论如何,我知道有办法进入已编译程序的代码,我想知道是否应该做些什么来确保没有人能以某种方式看到 MySQL 数据的登录信息。

谢谢

【问题讨论】:

    标签: c# security


    【解决方案1】:

    您可以通过多种不同的方式Protect Connection Information,具体取决于您的规格和要求。

    一个简单的规则,永远不要在编译代码中包含数据库连接字符串!!!

    一些链接
    Protect Connection Information
    SO - Encrypt connection string in NON ASP.Net applications
    MSDN Securing Connection Strings

    关于 cmets 中提出的问题的进一步说明。
    除了任何连接字符串配置之外,您还应该使用Role Base Access Control 限制应用程序对数据库的访问,以将授予应用程序的权限及其可以执行的过程或 Sql 命令减少到最低限度。

    【讨论】:

    • 即使你加密它,并且客户端有加密密钥(它必须能够在运行时解密它才能连接到数据库),客户端可以手动解密连接字符串并检查登录凭据。
    • 如果目标用户能够反编译您的代码、找到密钥、解密连接字符串,那么是的,此时您的数据库和数据应该通过使用角色来限制应用程序的能力来保护。
    • 同意。我几乎在代码中包含了我的连接字符串,直到我意识到客户端可以只使用 Reflector 或 ILSpy 来查看凭据:D
    【解决方案2】:

    防止人们看到您的 MySQL 连接字符串凭据的唯一方法是使用三层架构,其中您的网络服务器或服务在服务器上运行,该服务器保存连接字符串并向数据库发出请求。您的客户端应用程序将与网络服务器/服务进行通信。

    【讨论】:

      【解决方案3】:

      我同意劳埃德的观点。

      除了安全方面,将连接字符串排除在已编译代码之外意味着如果您出于某种原因需要更改它,则不必重新编译和重新部署代码。通常,您不知道有人弄乱了服务器名称或数据库名称或凭据,直到您的站点突然停止工作。在半夜。

      【讨论】:

      • 很抱歉,“将连接字符串排除在已编译代码之外”是什么意思
      • 在您的问题中,您说您担心有人会“进入已编译程序的代码”并查看您的 MySQL 数据。这表明您在编译的代码中有数据库连接信息。任何想要访问数据库以查看存储的密码(和其他数据)的人都需要连接字符串中的凭据才能访问数据库。
      【解决方案4】:

      我在想这将是我的程序的一个问题,所以我正在制作一个 PHP 文件来处理 POST 数据并返回一个响应,我服务器端的 PHP 文件保存数据库连接以及只返回有限的数据到我的 C# 程序。然后 C# 程序读取响应并获取适当的数据。这将使它自己的程序执行 HTTP POST 并且不知道数据库用户和密码。以及让我控制可以将哪些数据发送到 C# 程序。

      【讨论】:

      • 似乎是最安全的方法。从我在这里和其他地方读到的内容来看,直接连接到数据库是最糟糕的事情,因为帐户信息肯定会被截获。那,我发现在 c# 中用 mysql 做简单的事情是一件很痛苦的事情。在 php 中,这根本没有问题,但在 c# 中,我必须通过烦人的循环才能正确插入查询(必须制作一个用户必须将 mysql 数据输入到自己的服务器的应用程序)
      【解决方案5】:

      没有办法向可以使用类似 ILSpy 的入侵方式进入您的代码的人隐藏您的连接凭据。 «Intruder» 可以看到找到它们所需的任何东西。例如,他/她可以看到您如何解密(所谓的...)加密的 xml 并使用相同的方法。

      隐藏用户凭据的唯一方法是在数据库本身中,用户无权访问。

      说明:如果用户必须输入自己的凭据才能登录数据库,则数据库服务器将检查凭据,因此驻留在用户计算机中的应用程序中不会暴露凭据。并且用户看不到其他人的凭据。

      所以:

      • 将数据库中的用户创建为数据库用户。

      • 允许他们访问他们应该访问的任何表。

        在你的程序中:

      • 要求用户提供凭据。

      • 检查您是否可以使用这些凭据连接到数据库。

      【讨论】:

        猜你喜欢
        • 2013-12-25
        • 2013-02-01
        • 1970-01-01
        • 2011-11-18
        • 1970-01-01
        • 2016-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多