C++ 通过桌面应用程序/安全性查询数据库

C++ 通过桌面应用程序/安全性查询数据库,c++,mysql,database,qt,C++,Mysql,Database,Qt,我将使用Qt框架编写一个桌面应用程序,然后发布给公众。但我担心这种方法的安全性 我通常用PHP编写代码,因此我知道SQL注入和任何与数据库相关的东西可以确保任何查询的安全,但我遇到了一个以前从未遇到过的问题:桌面应用程序将查询从客户端发送到服务器。因此,我听说,它不如服务器对服务器(PHP)安全 主要的安全风险是什么,Qt如何防止它们,或者我如何通过特定的编码技术来防止它们 很抱歉,我不能说得更具体,但我在桌面应用程序领域没有真正的经验。 桌面应用程序将查询从计算机发送到服务器 我不知道您考虑的

我将使用Qt框架编写一个桌面应用程序,然后发布给公众。但我担心这种方法的安全性

我通常用PHP编写代码,因此我知道SQL注入和任何与数据库相关的东西可以确保任何查询的安全,但我遇到了一个以前从未遇到过的问题:桌面应用程序将查询从客户端发送到服务器。因此,我听说,它不如服务器对服务器(PHP)安全

主要的安全风险是什么,Qt如何防止它们,或者我如何通过特定的编码技术来防止它们

很抱歉,我不能说得更具体,但我在桌面应用程序领域没有真正的经验。

桌面应用程序将查询从计算机发送到服务器


我不知道您考虑的确切情况,但请记住,在这种情况下可以使用存储过程来降低sql注入的风险。如果桌面应用程序只有权调用db服务器上的一系列存储过程,而没有其他权限,那么您就大大降低了风险。如果桌面客户端根本不可信,那么另一种选择是不让客户端桌面应用程序直接访问数据库。您可以编写一个层驻留在服务器上,该层负责客户端的所有数据库访问,客户端与之交互,而不是与数据库交互。

Qt对您的数据保护没有任何帮助。您应该首先关注如何保护RDBMS。 当然,您应该仔细编写Qt客户机应用程序,通过检查和清理所有输入等来防止意外行为。但如果您不打算分发它,这不应该是您最直接的问题

如果您计划使用PostgreSQL作为应用程序的后端,您可以采取一些措施来减轻向Internet公开任何服务所带来的风险。 最基本的原则是:

  • 使用适当的规则设置防火墙。仅允许来自受信任源的入站连接
  • 仅接受SSL连接,即使使用自签名证书也是如此
  • 强制使用强密码。如果更合适,请使用客户端证书
  • pg_hba.conf
    文件设置为仅接受来自已知/受信任地址的连接
Debian/Ubuntu拥有优秀的PostgreSQL包。安装后,您可以轻松设置PG以允许SSL连接,而无需手动生成证书

相关PostgreSQL文档:

我可以为您提供一个非常基本的示例Qt应用程序(未完成),如果您愿意,它可以与PostgreSQL一起使用。请告诉我

编辑:将示例应用程序上载到GitHub:。试图整理一下,但是仍然有很多原本用西班牙语写的字符串。无论如何,如果您从Qt开始,您仍然可以找到一些有用的代码。
哦,我正在使用Qt5,必须为Qt编译我自己的PostgreSQL驱动程序(如果你在Linux上,这没什么大不了的)。我之所以提到这一点,是因为该应用程序可能使用Qt4编译,也可能不使用Qt4编译。祝你好运

我更关心的是查询和连接是否公开,因为它们必须从客户端传输到服务器。所以你担心数据包嗅探器?我猜只有加密的db连接可以,或者如果您选择创建客户端与之对话的服务器层,那么它必须是ssl加密的连接。这是此上下文中唯一的安全风险吗?您可能希望采取的方向是编写通过ssl运行的web服务。没有更多细节,我只能猜测。我真的希望尽可能避免服务器端脚本编写。