如何使用pyqt实现瘦客户端应用程序

时间:2010-08-19 00:33:22

标签: python qt networking pyqt thin

以下是我想做的事情,我想知道一些有这方面经验的人如何做到这一点:

我从http服务器获得三个POST请求:

  1. 小部件和布局
  2. 然后app逻辑(最小)
  3. 数据
  4. 或者最好结合前两个或全部三个。我正在考虑使用pyqt。我想我可以加载.ui文件。我可以解析json数据。我只是认为通过网络传递代码在客户端上执行会相当危险。如果有人可以劫持连接,或者可以更改应用程序设置以访问虚假服务器,那就太讨厌了。

    我想这样做是因为它让所有客户都保持最新状态。它有点像webapp,但由于Qt更简单。本质上,“瘦”应用程序只是一个从服务器加载数据的最小编译python文件。

    如何在不在客户端引入安全问题的情况下执行此操作? https足够好吗?有没有办法让pyqt在各种沙箱中运行?

    PS。我没有停留在Qt或python上。我确实喜欢这个概念。我真的不想使用Java服务器或客户端。

2 个答案:

答案 0 :(得分:1)

您希望从服务器向客户端发送“应用程序逻辑”而不发送“代码”本质上是自相矛盾的,尽管您可能还没有意识到 - 即使您发送的“逻辑”在某些内容中也是如此简化的ad-hoc“语言”(您甚至不认为是一种语言;-),对于所有意图和目的,您的Python代码将解释该语言,从而执行代码即可。你可以在某种程度上“沙盒化”事物,但最终,这就是你正在做的事情。

为了避免劫持和其他伎俩,请使用HTTPS并在您的客户端验证服务器的证书:这将保护您免受您担心的所有问题(如果有人可以编辑应用程序足以击败通过HTTPS证书验证,他们可以对其进行编辑,使其能够运行他们想要的任何代码,而无需从服务器发送该代码; - )。

一旦你使用https,让服务器发送Python模块(如果你需要在客户端上支持多个Python版本,则以源代码形式,否则字节码很好),然后客户端将它们保存到磁盘并导入/重新加载它们,会没事的。你基本上会做一个经典“插件架构”的变体,其中“插件”实际上是从服务器发送的(而不是在给定位置的磁盘上找到)。

答案 1 :(得分:1)

使用网络浏览器它是一个记录良好的系统,可以完成您想要的任何事情。在浏览器中创建简单的图形应用程序也相对较快。我推理的例子:

  • Sage数学环境已将graphical client构建为在浏览器中运行的应用程序以及本地Web服务器。

  • Pyjamas项目将Python编译为Javascript。这是恕我直言,值得一试。

修改

  • 您可以尝试PyPysandbox interpreter,作为通过网络传输的代码的安全Python解释器。

  • 然后有一个最简单的解决方案:只需通过网络发送Python模块,但签名和/或加密它们。这是所有Linux发行版的工作方式。您将加密令牌存储在本地计算机上。服务器在发送代码之前使用匹配的令牌对代码进行签名/加密。 GPG应该能够做到。