在C# / WPF中加密本地MySQL数据库的连接字符串

eoigrqb6  于 2023-05-01  发布在  C#
关注(0)|答案(1)|浏览(247)

我有一个在后台使用本地MySQL服务器的WPF应用程序。
该应用程序将运行在计算机上,我不能确保每个用户都是一个“好”用户,我注意到,一旦发布,它是非常容易反编译-暴露连接字符串到数据库。
我读过关于encrypting configuration information using protected configuration的文章,这似乎是要走的路,然而我很难找到在WPF中实现这样一个解决方案所需的信息。
如何安全地存储连接字符串,以及如何将其返回到C#文件中?

waxmsbnn

waxmsbnn1#

  • 如何安全地存储连接字符串?*

你不能。你只能混淆它。
显然,您可以在客户端应用程序中加密连接字符串。一个非常简单的方法是使用一个混淆程序,如。NET Reactor有一个简单的选项来加密所有字符串。如果你想使用模糊处理,那就去做吧。我个人是个粉丝。这为您提供了与可能建议的任何其他加密方法一样多的保护(也就是说不多),但它可能会给普通用户带来麻烦。
只要理解,当涉及到客户端应用程序时-无论是WPF,移动的还是Web -客户端可以访问的任何内容,控制客户端的人也可以访问。客户端必须始终被假定为不安全和不可信的。不管它是用C#这样易于反编译的语言编程,还是用C++或汇编语言编程。通过扩展,如果用户在其系统上具有本地数据库,则这些数据库也是不安全的。即使可以以某种方式阻止他们看到连接字符串,他们也可以通过其他方式访问它们。
保护数据不受客户端软件攻击的唯一方法是保持数据不可访问,除非通过您控制的安全中间人- e。例如,服务器。当客户端进行身份验证时,服务器提供一个短期令牌,允许客户端在会话期间访问数据。当会话结束时,令牌停止工作。换句话说,通过确保客户端永远不会获得数据库连接,来保护与数据库的连接;中间人(服务器)调解所有访问。委托给客户端的唯一秘密是一个短期的一次性令牌,您保留随时使其无效的权力。
即使您的用户都在安全的本地网络中的防火墙后面,如果您希望数据保持安全,您仍然不能让客户端计算机直接连接到数据库。当然,在以前,您可能已经看到过直接连接到SQL数据库的企业防火墙后面的生产力应用程序。现在几乎没有人这样做了,但如果他们这样做,那是因为他们已经接受了这样一个事实,即防火墙后面的任何人都可以使用或不使用客户端软件访问这些数据库。
我希望这对你有帮助,如果这不能直接回答你的问题,我道歉。对我来说,这是一个至关重要的问题,所有的开发人员都明白什么也许应该是数据安全的第一条戒律-你永远不应该委托客户端一些你想保密的东西。

相关问题