как реализовать тонкое клиентское приложение с pyqt - PullRequest
0 голосов
/ 19 августа 2010

Вот что я хотел бы сделать, и я хочу знать, как это делают некоторые люди, имеющие опыт в этой области:

С помощью трех запросов POST я получаю от http-сервера:

  1. виджеты и макет
  2. и затем логика приложения (минимальная)
  3. Данные

Или, может быть, лучше объединить первые два или все три. Я думаю об использовании PyQT. Я думаю, что я могу загрузить .ui файлы. Я могу разобрать данные JSON. Я просто думаю, что было бы довольно опасно передавать код по сети для выполнения на клиенте. Если кто-то может взломать соединение или изменить настройки приложений для доступа к фиктивному серверу, это неприятно.

Я хочу сделать это таким образом, потому что он поддерживает всех клиентов в актуальном состоянии. Это как веб-приложение, но проще из-за Qt. По сути, «тонкое» приложение - это просто минимальный скомпилированный файл Python, который загружает данные с сервера.

Как я могу сделать это, не создавая проблем безопасности на клиенте? Достаточно ли хорош https? Есть ли способ заставить pyqt работать в своего рода песочнице?

PS. Я не застрял на Qt или Python. Мне нравится концепция, хотя. Я действительно не хочу использовать Java-сервер или клиентскую часть.

Ответы [ 2 ]

1 голос
/ 19 августа 2010

Используйте веб-браузер, это хорошо документированная система, которая делает все, что вы хотите.Также относительно быстро создавать простые графические приложения в браузере.Примеры для моих рассуждений:

  • Математическая среда Sage создала графический клиент как приложение, которое запускается в браузере, вместе слокальный веб-сервер.

  • Существует проект Пижама , который компилирует Python в Javascript.Это ИМХО стоит попробовать.

Редактировать:

  • Вы можете попробовать PyPy интерпретатор песочницы , как безопасный интерпретатор Python для кода, который был передан по сети.

  • Тогда существует самое простое решение: просто отправляйте модули Python по сети, но подписывайте и / или шифруйте их.Так работают все дистрибутивы Linux.Вы храните криптографический токен на локальном компьютере.Сервер подписывает / шифрует код перед отправкой с помощью соответствующего токена. GPG должен уметь это делать.

1 голос
/ 19 августа 2010

Ваше желание отправлять «логику приложения» с сервера клиенту без отправки «кода» само по себе противоречиво, хотя вы можете этого еще не осознавать - даже если «логика», которую вы отправляете, в некоторой степениупрощенный специальный «язык» (о котором вы даже не думаете как о языке ;-), во всех отношениях ваш код Python будет интерпретировать этот язык и, таким образом, выполнять этот код.Вы можете в некоторой степени «помещать в песочницу», но, в конце концов, это то, что вы делаете.

Чтобы избежать взломов и других уловок, вместо этого используйте HTTPS и проверьте сертификат сервера в вашем клиенте:это защитит вас от всех проблем, о которых вы беспокоитесь (если кто-то может отредактировать приложение достаточно, чтобы победить проверку сертификата HTTPS, он может отредактировать его настолько, чтобы оно запускало любой код по своему усмотрению, без необходимости отправлять этот код изсервер; -).

После того, как вы используете https, сервер отправляет модули Python (в исходной форме, если вам нужно поддерживать несколько версий Python на клиентах, иначе подходит байт-код) и клиент, тем самымсохраните их на диск и импортируйте / перезагрузите их, все будет хорошо.В основном вы будете делать вариант классической «архитектуры плагинов», где «плагины» фактически отправляются с сервера (а не находятся на диске в заданном месте).

...