2012-01-03 96 views
4

无论如何阻止人们使用Reflector.net来反编译我的.exe c#应用程序吗?我知道这里有大量的帖子,但我不在乎人们是否可以看到我的代码,我唯一想要“隐藏”的是我的数据库连接字符串。c#保护设置中的数据库连接字符串防止反编译?

我目前在我的c#中使用“设置”来保持数据库连接的信息。 我想知道在我的项目设置中使用这些字符串是否会阻止人们看到它?

我使用Dotfuscator的在Visual Studio 2008,但我听说它不是阻止人们反编译我的程序。

我知道我可以使用一个Web服务,但我的服务器将在Linux上,所以我想我不能在Linux上储存的Web服务。

+0

看看这里:http://stackoverflow.com/questions/2107036/is-it-possible-to-prevent-decompilation-of-net-msil-dll – 2012-01-03 20:24:49

+0

和在这里:http://stackoverflow.com/questions/2478230/how-can-i-protect-my-net-assemblies-from-decompilation – 2012-01-03 20:25:36

+0

请每个帖子只有1个问题。 – 2012-01-03 20:25:47

回答

4

号即使你加密的程序代码或设置文件的连接字符串,则需要对其进行解密,程序必然包含解密密钥的地方,这意味着人谁是有兴趣在足够发现它找到它,不管你有多隐藏它。为什么你需要隐藏连接字符串?如果您担心拥有程序的人可能会直接调用Web服务并触发意外操作,那么您应该了解Web服务的结构,它们允许客户做什么以及授权如何工作,并在那里提高安全性代替。

+0

那么我的程序将连接到mysql数据库的意思是,如果人们可以看到数据库连接的信息,那么他们可以连接到它并删除所有数据?我应该用Java而不是c#来完成吗?我听说Java无法反编译? – Kinouk 2012-01-03 20:33:00

+2

@Kinouk你在这儿吠叫*完全错误的树; *所有代码都可以以某种方式'反编译'*,您可以*不*希望将最终用户的连接细节隐藏起来。你需要给他们自己的细节,而不是。 – 2012-01-03 20:37:17

+0

确定如此低调我应该在.php页面上创建一个注册页面,当用户使用c#应用程序时,他需要输入他的信息(通过服务器应用程序验证) – Kinouk 2012-01-03 20:40:56

5

如果你的程序中有连接字符串,你的程序的用户可以退出。即使您对它进行加密,他们也可以在程序连接到数据库服务器时嗅探它。

如果你不想让你的用户知道你的数据库登录凭证,不要给你的数据库登录凭证给用户。这是唯一的方法。

您可以通过,而不是为每个用户自己的凭据,并使用系统权限在DB服务器来控制它们可以或不可以做什么做到这一点。

+0

好的,但如果客户端不包含连接信息,客户端如何与服务器通信?我迷失了哈哈抱歉 – Kinouk 2012-01-03 20:34:30

+1

客户端*无法*连接到没有连接信息的服务器。这就是为什么你应该做我最后一段所说的话:给每个用户自己的登录名。实际上,您不应让他们自己登录数据库 - 您应该有一个服务器应用程序 - 例如Web服务 - 并且每个用户都有自己的唯一登录信息。就像你有自己独特的堆栈溢出登录一样 - 它们不只是给你数据库的用户名和密码。 – 2012-01-03 20:36:18

+0

没问题,我应该在a上注册一个页面。PHP页面,当用户使用C#应用程序时,他需要输入他的信息(通过服务器应用程序验证) – Kinouk 2012-01-03 20:39:42

0

看看this guide关于MSDN的这个特定主题。请记住,但是这只会改变被烧毁的安全性。现在,你需要管理的关键

0

正如其他人所指出的模糊的安全是存储在客户端应用程序的连接字符串没有真正保护了用户访问的二进制文件。

除非用户被信任直接使用具有相同权限的数据库,否则不要使用程序中的直接数据库连接。在您自己的服务器上托管服务之间提供服务(Web服务,REST服务等)。 Linux可以托管我提到的任何类型的服务(如果您希望它们使用Linux中的.NET,请使用Mono

为了通过Web服务公开您的数据库using Mono或您可以在Linux上托管的任何其他语言/框架您可以为每个要针对数据库执行的原子操作创建Web服务方法。

对数据库直接让客户端应用程序访问的另一个优点是,当客户端应用程序是使用本身和数据库之间的服务,您可以自由改变你的数据存储在不影响客户端。您可以决定更改数据库中的数据库模式,或者使用NOSQL解决方案或平面文件替换数据库。

有一个服务而不是直接与数据库通信会将认证/授权要求移动一步,所以现在您需要在服务中实现它。幸运的是,在Web服务中有丰富的认证支持。