c# - 如何从 WPF 应用程序安全可靠地与数据库交互
问题描述
当我使用 开发与在线 MySQL 数据库交互的WPF .NET Core 应用程序时,我注意到如果我的应用程序已部署并且有人代码反转它,我绝对无法使用易于访问的连接字符串来保护我的数据库不被读取或修改.EntityFramework
我搜索了一下,发现了以下几个可能的解决方案:
app.config
使用加密存储连接字符串aspnet_regiis
(但 .NET Core 似乎更面向.json
配置文件,因此无法使用加密aspnet_regiis
)- 使用类似 c# 的混淆器对源代码进行混淆
ConfuserEx
(如果我理解正确,它只会使连接字符串更难阅读,但仍有可能得到它并弄乱数据库,对吧?) - 构建 API 并与之交互,而不是对数据库进行更改(但即便如此,如何确保 API 请求真正来自我的 WPF 应用程序而不是来自恶意用户?)
如果您对这些解决方案有更多的了解,或者可能有另一种方法可以安全地连接到在线数据库,非常欢迎详细的步骤/链接!
解决方案
经过一些研究和测试,我发现防止恶意用户读取和弄乱连接的数据库(即使他可以访问连接字符串)的正确方法是将我的应用程序限制为仅执行将给出的存储过程所需的最少数据。对于将读取或更改用户敏感数据的存储过程,还可以通过在其所需参数中包含用户的秘密令牌,这将是用户注册时在 SQL 中生成的随机字符串。
剩下的唯一问题是,如果黑客发送垃圾邮件请求以尝试暴力破解(即使几乎不可能暴力破解一个非常长且安全的令牌),它仍然可能使 MySQL 服务器过载甚至崩溃。为了防止这种情况发生,唯一的解决方案似乎是使用 API。
推荐阅读
- windows - 在win 10中卸载无法访问桌面的程序
- ssl - 使用 openssl 命令行作为客户端发送 TLS 关闭
- email - Nodemailer 没有刷新令牌或刷新处理程序回调设置错误
- linux - ubunto终端中的颤振命令错误
- python - 训练自定义 word2vec 模型
- openssl - 如何配置基于 OpenSSL 的工具以信任自定义 CA?
- python - 将 QAbstractListModel 与 QML 同步
- python - Heroku上Todoist API调用的不同Json结果?[todoist-python]
- swift - 从本地数据库中提取详细信息
- express - 使用 bodyparser 将请求发布到服务器