【发布时间】:2012-03-09 17:54:31
【问题描述】:
我对 C# 很陌生,我做了很多东西,但我缺少很多基础知识。 无论如何,我正在制作一个用户必须登录的程序,然后它会检查输入的密码是否与数据库中的密码相同。
无论如何,我知道有办法进入已编译程序的代码,我想知道是否应该做些什么来确保没有人能以某种方式看到 MySQL 数据的登录信息。
谢谢
【问题讨论】:
我对 C# 很陌生,我做了很多东西,但我缺少很多基础知识。 无论如何,我正在制作一个用户必须登录的程序,然后它会检查输入的密码是否与数据库中的密码相同。
无论如何,我知道有办法进入已编译程序的代码,我想知道是否应该做些什么来确保没有人能以某种方式看到 MySQL 数据的登录信息。
谢谢
【问题讨论】:
您可以通过多种不同的方式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 命令减少到最低限度。
【讨论】:
防止人们看到您的 MySQL 连接字符串凭据的唯一方法是使用三层架构,其中您的网络服务器或服务在服务器上运行,该服务器保存连接字符串并向数据库发出请求。您的客户端应用程序将与网络服务器/服务进行通信。
【讨论】:
我同意劳埃德的观点。
除了安全方面,将连接字符串排除在已编译代码之外意味着如果您出于某种原因需要更改它,则不必重新编译和重新部署代码。通常,您不知道有人弄乱了服务器名称或数据库名称或凭据,直到您的站点突然停止工作。在半夜。
【讨论】:
我在想这将是我的程序的一个问题,所以我正在制作一个 PHP 文件来处理 POST 数据并返回一个响应,我服务器端的 PHP 文件保存数据库连接以及只返回有限的数据到我的 C# 程序。然后 C# 程序读取响应并获取适当的数据。这将使它自己的程序执行 HTTP POST 并且不知道数据库用户和密码。以及让我控制可以将哪些数据发送到 C# 程序。
【讨论】:
没有办法向可以使用类似 ILSpy 的入侵方式进入您的代码的人隐藏您的连接凭据。 «Intruder» 可以看到找到它们所需的任何东西。例如,他/她可以看到您如何解密(所谓的...)加密的 xml 并使用相同的方法。
隐藏用户凭据的唯一方法是在数据库本身中,用户无权访问。
说明:如果用户必须输入自己的凭据才能登录数据库,则数据库服务器将检查凭据,因此驻留在用户计算机中的应用程序中不会暴露凭据。并且用户看不到其他人的凭据。
所以:
将数据库中的用户创建为数据库用户。
允许他们访问他们应该访问的任何表。
在你的程序中:
要求用户提供凭据。
检查您是否可以使用这些凭据连接到数据库。
【讨论】: