我将使用 Qt 框架编写一个桌面应用程序,然后将其发布给公众。但我担心这种方法的安全性。
我通常用 PHP 编写代码,因此我知道 SQL 注入和任何与使任何查询安全相关的数据库,但我遇到了一个我以前从未遇到过的问题:桌面应用程序将查询从客户端发送到服务器,因此,我已经听说,不如服务器到服务器(PHP)安全。
主要的安全风险是什么,Qt 如何防止它们或者我如何通过特定的编码技术来防止它们?
对不起,我不能更具体,但我在桌面应用程序领域并没有真正的经验。
Qt 不会为您保护您的数据做任何事情。您应该首先专注于保护您的 RDBMS。当然,您应该仔细编码您的 Qt 客户端应用程序,以通过检查和清理所有输入等来防止意外行为,但如果您不打算分发它,这不应该是您最直接关心的问题。
如果您计划使用 PostgreSQL 作为应用程序的后端,您可以采取一些措施来降低将任何服务暴露于互联网所带来的风险。最基本的:
pg_hba.conf
文件设置为仅接受来自已知/受信任地址的连接。Debian/Ubuntu 拥有出色的 PostgreSQL 软件包。安装后,您可以轻松设置 PG 以允许 SSL 连接,而无需手动生成证书的麻烦。
相关 PostgreSQL 文档:
如果您愿意,我可以为您提供一个非常基本的示例 Qt 应用程序(未完成),该应用程序旨在与 PostgreSQL 一起使用。让我知道。
Edit: uploaded the example app to GitHub: exampleapp. Tried to tidy up but there's still a mess with a lot of strings that were originally written in spanish. At any rate, you can still find a bit of useful code if you're starting with Qt. Oh, and I'm using Qt5 and had to compile my own PostgreSQL driver for Qt (not a big deal if you're on Linux). I mention this because the app might or might not compile with Qt4. Good luck!
关于
桌面应用程序将查询从计算机发送到服务器
我不知道您正在考虑的确切情况,但请记住,在这种情况下可以使用存储过程来降低 sql 注入的风险。如果桌面应用程序仅有权调用数据库服务器上的一系列存储过程而没有其他权限,那么您已经大大降低了风险。如果桌面客户端根本不可信,那么替代方法是不让客户端桌面应用程序直接访问数据库。您可以编写一个层驻留在服务器上,该层为客户端执行所有数据库访问,并且客户端与其交互而不是数据库。