Я новичок, но я уже давно здесь, в SO. Мне нужен совет по поводу системы, которую моя команда и я разрабатываем для проекта.
TLDR: Наше веб-приложение хочет отправлять команды клиентским приложениям. Я знаю, что это небезопасно, но только для интранета. Есть ли способ отправить команды оболочки на клиентскую машину из нашего веб-приложения в браузере? Может быть, какое-то расширение Firefox?
По сути, у нас должно быть облачное веб-приложение (на основе PHP), способное работать с устройствами (считывателями смарт-карт), подключенными к клиентским машинам. Одним словом, графический интерфейс для системы построен с использованием веб-технологий.
Чтобы получить четкую картину, представьте, что у вас есть ноутбук, и вы хотите иметь возможность использовать устройство сканера штрих-кодов (подключенное через USB) в сочетании с POS-приложением, которое вы используете в своем браузере.
Веб-приложение предназначено для размещения в облаке, но мы можем контролировать первоначальную настройку ноутбуков и планшетов, которые будут использоваться для доступа к нашему веб-приложению.
В настоящее время у нас установлен и работает демон на клиентских устройствах. Этот демон действует как HTTP-сервер и управляет подключенным USB-устройством из окна браузера (мы отправляем ему HTTP-URL, например, http://127.0.0.1/scan). Демон принимает команды, если они адресованы либо как localhost, либо с использованием действительного IP-адреса клиентского компьютера.
Я полагаю, что предыдущий разработчик создал этот демон с надеждой на прямую отправку HTTP-запросов из облачного приложения.
Основная проблема заключается в том, что в большинстве случаев наша команда будет выходить в Интернет через точку доступа, поэтому маршрутизатор будет назначать клиентским машинам локальный IP-адрес. Наше веб-приложение не знает, кому адресовать его команды.
Поскольку сотрудники, которые будут использовать это, будут развернуты где угодно, мы не можем контролировать конфигурации маршрутизаторов той точки доступа, которую они используют для доступа к нашему веб-приложению. Так что NAT вышел.
Пока что мы придумали 1 решение для этого:
Мы пишем дополнительный демон (наряду с драйвером устройства), который интерпретирует сообщения из браузера и отправляет их на локальный хост клиента (эмулируемый http-сервер демона драйвера устройства). Итак, теперь наша единственная проблема заключается в том, как наше веб-приложение из браузера сможет «общаться» с нашим скриптом / приложением интерпретатора.
Есть ли способ отправить команды оболочки на стороне клиента из веб-приложения? Я знаю, что это серьезная дыра в безопасности, но в наших силах убедиться, что и сервер, и клиент не выполняют никаких вредоносных действий.
Или, может быть, мы можем записать наше веб-приложение в файл xml или txt, размещенный на клиенте, а демон интерпретатора просто читает этот файл xml или txt?
Кто-то упомянул ActiveX в другой ветке, которую я нашел во время исследования этой проблемы. Есть мысли по этому поводу?
В крайнем случае следует создать расширение Firefox, которое взаимодействует с демоном драйвера устройства. Нам не нравится это решение, поскольку на некоторых планшетах мы не будем использовать Firefox в качестве браузера.
Клиентские машины будут либо ноутбуками с Windows, либо Raspberry Pi (с Raspbian ARM LINUX)
Спасибо!
Задача ещё не решена.
Других решений пока нет …