2012-03-27 62 views
0

一个理论上的问题:保护C#源代码中的敏感数据?

我有一个C#Windows窗体应用程序,它将一些用户提交的数据发送回互联网上的外部mySQL服务器。 如何防止人们看到mySQL服务器的用户名和密码? (例如,通过反编译C#exe程序)。

问候

+2

不要保留在源代码中? – Tudor 2012-03-27 14:17:51

+0

混淆可以是一个解决方案..但我宁愿使用这种类型的东西的Web服务... – gbianchi 2012-03-27 14:18:42

+0

使用第三方身份验证提供程序,如OpenID – 2012-03-27 14:20:31

回答

3

简短的回答:你不能 - 你不控制一台机器上运行,什么都可以反编译等

可能的选项:

您可以尝试的方法在服务器端使用SSL安全的Web服务,通​​过客户端证书(SSL标准的一部分)对客户端进行身份验证。该web服务将代表客户端访问数据库。然后你可以保证网络服务和数据库之间的网络连接......

+0

这是伟大的,直到有人窃取客户端证书。 – 2012-03-27 21:57:01

+0

@boo这是一个可解决的问题:您可以使客户端证书无效并发布新的客户端......您甚至可以为每个用户提供不同的客户端证书,这使得失效问题少得多,因为只有该一个用户需要新的一个(所有其他人都可以在没有注意到已经失效的情况下工作)。 – Yahia 2012-03-28 05:06:48

+0

在这种情况下,从可维护性的角度出发,每个用户密码的问题并不比最好,因为开发证书管理系统比密码管理系统更昂贵。 – 2012-03-28 14:25:07

1

通常你要么提示用户输入凭证,要么你输入账号是公开的(例如凭证是不安全的,就像你的情况一样)你限制帐户被允许执行的操作。

1

我会将用户提交的数据传递给与数据库服务器进行实际对话的另一个服务。这样你的连接细节可以与客户分开。

如果你不能这样做,那么你应该为你的客户端代码使用的mySQL数据库创建一个受限帐户。

0

住在事实上,客户端软件知道的一切都是用户所了解的。

为客户端软件设置尽可能小的接口。而不是公开完整的数据库帐户,只能使用一个限制于某些存储过程。或者不要直接访问数据库,而是通过(网络)服务访问数据库。然后,确保该服务仅公开可安全执行的方法。