0

这是我想做的事情,我想知道一些在这个领域有经验的人是如何做到的:

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

  1. 小部件和布局
  2. 然后是应用逻辑(最小)
  3. 数据

或者也许最好将前两个或所有三个结合起来。我正在考虑使用pyqt。我想我可以加载 .ui 文件。我可以解析json数据。我只是认为通过网络传递代码以在客户端上执行是相当危险的。如果有人可以劫持连接,或者可以更改应用程序设置以访问虚假服务器,那就太糟糕了。

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

如何在不给客户端引入安全问题的情况下做到这一点?https足够好吗?有没有办法让 pyqt 在各种沙箱中运行?

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

4

2 回答 2

1

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

为了避免劫持和其他技巧,请在您的客户端中使用HTTPS和验证服务器的证书:这将保护您免受您担心的所有问题(如果有人可以编辑应用程序足以破坏 HTTPS 证书验证,他们可以编辑它足以让它运行他们想要的任何代码,而无需从服务器发送该代码;-)。

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

于 2010-08-19T00:40:41.407 回答
1

使用网络浏览器,它是一个有据可查的系统,可以做你想做的一切。在浏览器中创建简单的图形应用程序也相对较快。我的推理示例:

  • Sage数学环境已将其图形客户端构建为浏览器中运行的应用程序,以及本地 Web 服务器。

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

编辑:

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

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

于 2010-08-19T02:15:12.803 回答