c#保护设置中的数据库连接字符串防止反编译?

时间:2012-01-03 20:22:41

标签: c# settings decompiling reflector

有没有阻止人们使用Reflector.net反编译我的.exe c#应用程序?我知道有很多帖子关于这个,但我真的不在乎人们是否可以看到我的代码我唯一想要“隐藏”的是我的数据库连接字符串。

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

我在visual studio 2008中使用DotFuscator,但我听说它并没有阻止人们反编译我的程序。

我知道我可以使用Web服务,但我的服务器将在linux上,所以我想我无法在Linux上存储Web服务。

4 个答案:

答案 0 :(得分:5)

如果您的程序中包含连接字符串,程序的用户可以将其取回。即使你对它进行加密,当程序连接到数据库服务器时,它们也会嗅探它。

如果您不希望用户知道您的数据库登录凭据,不会向您的用户提供您的数据库登录凭据。这是唯一的方法。

您可以通过为每个用户提供自己的凭据,并使用数据库服务器中的权限系统来控制他们能做什么或不能做什么来实现。

答案 1 :(得分:4)

没有。即使您在程序代码或设置文件中加密连接字符串,您也需要对其进行解密,并且程序必须在某处包含解密密钥,这意味着有兴趣找到它的人找到它,无论你隐藏它多么有创意。为什么需要隐藏连接字符串?如果您担心有程序的人可能直接调用Web服务并触发意外操作,您应该研究Web服务的结构,允许客户端做什么以及授权如何工作,并在那里进行安全性改进代替。

答案 2 :(得分:0)

从MSDN上查看有关此特定主题的this guide。但请记住,这只会改变被烧毁的安全性。现在您需要管理密钥的安全性

答案 3 :(得分:0)

正如其他人所说,混淆不是对用户可以访问二进制文件的客户端应用程序中存储的连接字符串的真正保护。

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

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

让客户端应用程序直接访问数据库的另一个好处是,当客户端应用程序在其自身与数据库之间使用服务时,您可以自由地更改数据存储而不会影响客户端。您可以决定更改数据库中的数据库模式,或者使用NOSQL解决方案甚至平面文件替换数据库。

拥有服务而不是直接与数据库通信会将身份验证/授权要求移动一步,因此您现在需要在服务中实现它。幸运的是,Web服务中的身份验证有很多支持。