0

当我使用 开发与在线 MySQL 数据库交互的WPF .NET Core 应用程序时注意到如果我的应用程序已部署并且有人代码反转它,我绝对无法使用易于访问的连接字符串来保护我的数据库不被读取或修改.EntityFramework

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

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

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

4

2 回答 2

0

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

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

于 2020-09-21T17:56:42.723 回答
0

构建 API 并与之交互,而不是对数据库进行更改

这将是推荐的方法。

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

你真的不能。

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

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

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

于 2020-09-07T13:54:10.880 回答