c#在设置中保护数据库连接字符串防止反编译
本文关键字:编译 字符串 数据库连接 设置 保护 | 更新日期: 2023-09-27 18:19:25
是否有办法阻止人们使用Reflector.net来反编译我的。exe c#应用程序?我知道有很多关于这个的帖子,但我真的不在乎人们是否可以看到我的代码,我唯一想要"隐藏"的是我的数据库连接字符串。
我目前在c#中使用"设置"来保持数据库连接的信息。我想知道如果使用这些字符串在我的项目的设置会阻止人们看到它吗?
我在visual studio 2008中使用DotFuscator,但我听说它不能阻止人们反编译我的程序。
我知道我可以使用Web服务,但我的服务器将在linux上,所以我想我不能在linux上存储Web服务。
No。即使您在程序代码或设置文件中加密了连接字符串,您也需要对其进行解密,并且程序必须在某个地方包含解密密钥,这意味着对查找它足够感兴趣的人将会找到它,无论您如何创造性地隐藏它。为什么需要隐藏连接字符串?如果您担心拥有您的程序的人可能会直接调用web服务并触发意想不到的操作,那么您应该研究一下web服务的结构、它们允许客户机执行的操作以及授权的工作方式,并在那里进行安全性改进。
如果程序中有连接字符串,则程序的用户可以将其取出。即使您加密了它,当您的程序连接到DB服务器时,它们也可以嗅探它。
如果你不想让你的用户知道你的数据库登录凭据,不要把你的数据库登录凭据给用户。这是唯一的办法。
您可以通过为每个用户提供自己的凭据,并使用DB服务器中的权限系统来控制他们可以做什么或不可以做什么来做到这一点。
正如其他人所说,对于存储在用户可以访问二进制文件的客户端应用程序中的连接字符串,混淆并不是真正的保护。
不要从程序中使用直接数据库连接,除非用户被信任可以以相同的权限直接使用数据库。在您自己的服务器上托管一个服务(web服务、rest服务等)。Linux可以托管我提到的任何类型的服务(如果你想在Linux上的。net中使用它们,请使用Mono)
为了通过使用Mono或任何其他可以在Linux上托管的语言/框架的web服务公开您的数据库,您需要为您想要对数据库执行的每个原子操作创建一个web服务方法。
让客户端应用程序直接访问数据库的另一个优点是,当客户端应用程序在其自身和数据库之间使用服务时,您可以自由地更改数据存储,而不会影响客户端。您可以决定更改数据库中的数据库模式,或者用NOSQL解决方案甚至平面文件替换数据库。
使用服务而不是直接与数据库通信将身份验证/授权需求移动了一步,因此现在您需要在服务中实现它。幸运的是,web服务中有丰富的身份验证支持。
看看MSDN关于这个特定主题的指南。但是请记住,这只会转移安全性。现在需要管理密钥