如何通过WPF应用安全与数据库交互

时间:2020-09-07 13:16:25

标签: c# database wpf entity-framework security

当我开发一个使用EntityFramework与在线 MySQL数据库进行交互的 WPF .NET Core 应用程序时,我注意到我绝对无法保护自己的如果部署了我的应用程序,并且有人代码将其反转,则使用易于访问的连接字符串读取或修改数据库。

我搜索了一下,发现了以下几种可能的解决方案:

  • 使用app.config 将连接字符串存储在加密的aspnet_regiis中(但是.NET Core似乎更面向.json配置文件,因此无法使用{进行加密{1}})
  • 使用aspnet_regiis 这样的c#混淆器来混淆源代码(如果我正确理解的话,这只会使连接字符串难以阅读,但是仍然有可能弄乱连接字符串并弄乱数据库,对吗?)
  • 构建并与API交互将对数据库进行更改(但即使如此,如何确保API请求确实来自我的WPF应用程序而不是来自恶意用户?)

如果您对这些解决方案有更多的了解,或者可能还有另一种使其安全可靠地连接到在线数据库的方法,欢迎使用详细的步骤/链接!

2 个答案:

答案 0 :(得分:0)

相反,构建API并与之交互将对数据库进行更改

这是推荐的方法。

(但是即使如此,如何确保API请求确实是来自我的WPF应用程序而不是来自恶意用户?)

你不能真的。

在公开公开的客户端应用程序中嵌入某种访问密钥或公开URL时,您基本上会接受可能公开的事实。您应该假设恶意用户可以从客户端应用程序中提取密钥/ URL,而不会产生任何混淆。

该服务可能拒绝它认为滥用API的IP地址发出的请求,但仍需要处理这些请求。

管理公共API并非易事。您可能需要考虑将应用托管在托管云中。

答案 1 :(得分:0)

经过一些研究和测试,我发现防止恶意用户读取和弄乱连接的数据库(即使他可以访问连接字符串)的正确方法是通过< strong>限制我的应用仅执行存储过程,这将提供所需的最少数据。对于将要读取或更改用户敏感数据的存储过程,还需要在其必需的参数中包含用户的秘密令牌,该令牌是用户注册时SQL中生成的随机字符串。

剩下的唯一问题是,如果垃圾邮件请求尝试进行暴力破解(即使暴力破解一个非常长且安全的令牌几乎是不可能的),它仍然可能使MySQL服务器过载甚至崩溃。为了防止这种情况发生,唯一的解决方案似乎是使用API​​。