LINUX.ORG.RU

Доступ из веб-приложения к тому, что нельзя

 ,


0

1

Я хочу из своего веб-приложения, то бишь из жаваскрипта на сайте взаимодействовать с тем, с чем жаваскрипту взаимодействовать не дают никак, нет такого API. Ну для простоты - устанавливать TCP-соединения по произвольному протоколу. Или общаться с USB-устройствами не из разряда webusb/serial/hid. Или ещё что-нибудь, не суть.

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

Минусы: нужно ставить самоподписанный сертификат, нужно ставить программу в автостарт.

Модификация этого варианта - пытаемся получить подписанный сертификат от какого-нибудь леценкрипта. Это можно, но очень геморройно в разработке, по крайней мере если делать это секурно. Собственно это основной минус. Ещё минус - у леценкрипта лимиты и если у тебя много таких точек, ты в них можешь упереться, придётся или идти к нему на поклон, или морочиться ещё больше с кучей доменов.

Модификация этого варианта это включить #allow-insecure-localhost в chrome://flags, не тестировал этот вариант, точно не знаю, как оно работает.

Модификация этого варианта это подождать, пока реализуют Issue 589141: *.localhost should be considered secure. Тогда можно будет просто слушать http и не морочить себе голову. Но это не точно.

Самый «правильный» вариант - работать через browser extension, который с помощью native messaging будет общаться с запущенным нативным приложением. Но browser extension надо ставить через chrome web store, в котором модераторы, зависеть от которых не очень хочется.

Модификация «правильного» варианта - включаем режим разработчика в браузере и грузим расширение из файловой системы. Но стрёмно всё это и не правильно.

Все варианты установки расширения в браузер из отдельного приложения вроде как убрали.

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

Подскажите, какие варианты я мог упустить.

★★★★★

Завернуть приложение в электрон / обращаться из электрона к веб-приложению на сервере?

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

Спасибо, вариант, хотя и не совсем желательный.

Legioner ★★★★★
() автор топика

пытаемся получить подписанный сертификат от какого-нибудь леценкрипта. Это можно, но очень геморройно в разработке, по крайней мере если делать это секурно. Собственно это основной минус. Ещё минус - у леценкрипта лимиты и если у тебя много таких точек, ты в них можешь упереться, придётся или идти к нему на поклон, или морочиться ещё больше с кучей доменов.

Тебе нужен wildcard сертификат, а для разработки можно просто в /etc/hosts прописывать ипшник девайса как dev_0001.your_domain.kz И не надо ничего перегенеривать. Разве что летсенкрипт постоянно обновлять надо, мб лучше разориться на более долгосрочный.

cocucka ★★★★☆
()
Ответ на: комментарий от cocucka

Тебе нужен wildcard сертификат

И что я с ним буду делать? Предлагаешь каждому клиенту засунуть в программку приватный ключ от одного wildcard сертификата? Это нарушение правил CA, если всплывёт, то ключи отзовут. Даже если не всплывёт, надо обновлять каждые 2 месяца, что гемор. Но в целом да, если забить на правила CA, то вариант, ок, спасибо.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Legioner

Зачем в програмку? Это ж у тебя какой-то девайс? Вот в TPM ему и засунь. Нет TPM, тогда в какой-нибудь KMS вроде Hashicorp Vault.

cocucka ★★★★☆
()
Ответ на: комментарий от cocucka

Ничего не понял. Какой ещё девайс, какой TPM. Пользователь сидит за обычным компьютером с обычной семёрочкой максимальненькой под обычным хромом.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

Я чёт про то, что ты девайс хочешь опрашивать подумал. Ладно, ну нет девайса – не беда. Значит нужен Vault

cocucka ★★★★☆
()
Ответ на: комментарий от damix9

когда-то подобная задача решилась как раз XUL-расширением, написанным на основе https://github.com/brettz9/asyouwish/ но там всё мхом уже поросло по современным меркам: firefox 52.9 ESR в котором как то ещё шевелится (seamonkey еще). на web-extension переписать руки не дошли. c XUL всё кроссплатформенно и просто получалось - платформа mozill-ы всё готовое предоставляет: доступ к локальной фс, запуск внешних приложений, хттп всяко разно понятное дело тоже.

dab18
()
Ответ на: комментарий от dab18

Есть поддерживаемый ныне браузер Pale Moon, где XUL применяется. А на WebExtensions работа с файлами и многое другое нельзя.

damix9 ★★★
()

А нафига вообще нужен браузер, если ты пользователя заставил накатить приложение и ещё добавить его в автостарт? Не проще тогда не сношать мозг и просто использовать классическое десктопное приложение?

anonymous
()
Ответ на: комментарий от anonymous

А нафига вообще нужен браузер, если ты пользователя заставил накатить приложение и ещё добавить его в автостарт? Не проще тогда не сношать мозг и просто использовать классическое десктопное приложение?

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

Legioner ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.