将客户端-服务器应用程序转换为 Web 连接:REST 还是客户端查询?
Convert Client-Server Application to Web connection: REST or Client side query?
我在 Delphi 为一家生产公司编写了一些应用程序,该应用程序的目的是标签打印和生产数据 acquisition.All 这些应用程序是客户端-服务器(使用 ZeosLib 直接连接到PostgreSQL 通过 5432 端口)。
最近公司收购了其他生产站点,想在这些站点安装我的软件。无法建立 LAN2LAN 连接,从外部生产站点到公司总部的唯一通信方式是通过 Internet 连接通过 HTTP (https) 服务器。
当我遇到这个问题时,我首先想到的是将应用程序转换为使用 REST 并编写所有服务器端查询以调用正确的端点。但是,这需要大量工作:应用程序有许多查询需要重写。
因此,由于时间原因,我尝试创建一个服务器端 PHP 脚本,能够接收用 SQL 编写的请求,连接到 PostgreSQL 并在 JSON 中响应=] 数据。之后,我修改了我的应用程序,使用附加协议(名为 websql)扩展 ZeosLib 连接,能够将 SQL 查询重定向到 PHP 脚本并将接收到的 JSON 数据转换为 Delphi 数据集兼容格式。
一切正常:在我所有的应用程序中,我现在可以使用新的“websql”更改连接协议,并且我可以在分支机构中快速安装新版本。
做这个测试很简单,但现在有一个安全问题:Web 连接受 user/password 和 https 保护,但它是否足够?
是否应允许客户端应用程序通过 https 发送查询?在生产环境中安装应用程序之前,我想知道是否有办法使该架构尽可能安全,或者是否适合使用 REST 通信重写所有应用程序。
谢谢大家,
安德里亚
只要您在双方都使用证书并明显检查证书有效性,HTTPS 就足够安全了。
使用证书时,客户端肯定会连接到他认为要连接的服务器,否则会出现证书错误。服务器同理:当客户端使用证书时,服务器可以确定客户端是合法客户端。
从客户端提供到 运行 SQL 的 JSON 网关不是正确的 REST,不应该用于任何严肃的工作。
几个原因:
客户端的任何人都可以 运行 任何类型的 SQL 语句,这可能非常不安全,例如 DROP TABLE 或 DROP DATABASE在 SELECT 语句的中间。或者它可以访问其他客户的数据。
你仍然有客户端的逻辑。这不是 n 层,这是变相的 2 层。您使用 HTTPS+JSON 而不是直接连接到数据库这一事实不会改变全局架构。
仅当双方(客户端和服务器)强制使用其证书进行相互身份验证时,HTTPS 才是安全的。否则,MiM 攻击非常普遍。使用 VPN 或 SSH 隧道可能会有所帮助。
性能可能不是很好,因为您不缓存数据,并且 Internet 上的网络延迟比本地网络上的网络延迟更差。
如果你真的想朝这个方向走,不要重新发明轮子,使用像我们Open Source SynDBRemote which works very well with Zeos/ZDBC - or proprietary alternatives.
这样更优化的解决方案
但我宁愿切换到 REST 架构,逻辑在服务器端,SQL 在服务器端。它将更容易维护和扩展,并允许非 Delphi 客户端 - 例如JavaScript 个桌面或移动客户端。
我在 Delphi 为一家生产公司编写了一些应用程序,该应用程序的目的是标签打印和生产数据 acquisition.All 这些应用程序是客户端-服务器(使用 ZeosLib 直接连接到PostgreSQL 通过 5432 端口)。
最近公司收购了其他生产站点,想在这些站点安装我的软件。无法建立 LAN2LAN 连接,从外部生产站点到公司总部的唯一通信方式是通过 Internet 连接通过 HTTP (https) 服务器。
当我遇到这个问题时,我首先想到的是将应用程序转换为使用 REST 并编写所有服务器端查询以调用正确的端点。但是,这需要大量工作:应用程序有许多查询需要重写。
因此,由于时间原因,我尝试创建一个服务器端 PHP 脚本,能够接收用 SQL 编写的请求,连接到 PostgreSQL 并在 JSON 中响应=] 数据。之后,我修改了我的应用程序,使用附加协议(名为 websql)扩展 ZeosLib 连接,能够将 SQL 查询重定向到 PHP 脚本并将接收到的 JSON 数据转换为 Delphi 数据集兼容格式。
一切正常:在我所有的应用程序中,我现在可以使用新的“websql”更改连接协议,并且我可以在分支机构中快速安装新版本。
做这个测试很简单,但现在有一个安全问题:Web 连接受 user/password 和 https 保护,但它是否足够? 是否应允许客户端应用程序通过 https 发送查询?在生产环境中安装应用程序之前,我想知道是否有办法使该架构尽可能安全,或者是否适合使用 REST 通信重写所有应用程序。
谢谢大家,
安德里亚
只要您在双方都使用证书并明显检查证书有效性,HTTPS 就足够安全了。
使用证书时,客户端肯定会连接到他认为要连接的服务器,否则会出现证书错误。服务器同理:当客户端使用证书时,服务器可以确定客户端是合法客户端。
从客户端提供到 运行 SQL 的 JSON 网关不是正确的 REST,不应该用于任何严肃的工作。
几个原因:
客户端的任何人都可以 运行 任何类型的 SQL 语句,这可能非常不安全,例如 DROP TABLE 或 DROP DATABASE在 SELECT 语句的中间。或者它可以访问其他客户的数据。
你仍然有客户端的逻辑。这不是 n 层,这是变相的 2 层。您使用 HTTPS+JSON 而不是直接连接到数据库这一事实不会改变全局架构。
仅当双方(客户端和服务器)强制使用其证书进行相互身份验证时,HTTPS 才是安全的。否则,MiM 攻击非常普遍。使用 VPN 或 SSH 隧道可能会有所帮助。
性能可能不是很好,因为您不缓存数据,并且 Internet 上的网络延迟比本地网络上的网络延迟更差。
如果你真的想朝这个方向走,不要重新发明轮子,使用像我们Open Source SynDBRemote which works very well with Zeos/ZDBC - or proprietary alternatives.
这样更优化的解决方案
但我宁愿切换到 REST 架构,逻辑在服务器端,SQL 在服务器端。它将更容易维护和扩展,并允许非 Delphi 客户端 - 例如JavaScript 个桌面或移动客户端。