Безопасный обмен данными между браузером и собственным приложением

12

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

Как обойти песочницу браузера, чтобы вы могли общаться (безопасно, поскольку данные потенциально чувствительны) с собственным приложением.

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

Зак Кус
источник
1
Возможно, вы сможете получить какое-то решение, работающее там, где нативное приложение содержит небольшой веб-сервер, работающий на локальном хосте.
Амон
Я тоже так думал ... У меня были смутные неутвержденные опасения, которые не были бы "обеспокоены". Есть ли примеры приложений, делающих это сегодня? (запишите это в ответ, и вы, вероятно, получите очки)
Зак Кус
Встроенный браузер будет лучшим. Встраивайте браузер в приложение и программируйте свои взаимодействия по мере необходимости.
Грегджава,

Ответы:

7

Вы можете встроить веб-сервер в собственное приложение, а затем ваш клиент может делать вызовы по нему с помощью жестко запрограммированных ссылок на http: // localhost / xyz (здесь вам может потребоваться предупреждение о межсайтовых сценариях и / или запустить сервер. на не-http порт). Если вы используете веб-сокеты, ваше собственное приложение может даже передавать данные в веб-браузер, как только браузер инициирует связь.

Я делаю это сам локально, встроенный элемент управления веб-браузера запрашивает данные визуализации с пользовательского веб-сервера, и при разработке я запускаю оба на одном компьютере.

Существует много крошечных и эффективных встроенных веб-серверов для C / C ++ (Mongoose, NxWeb, civetweb и т. Д.), C # обычно используют полноценный WCF-сервер, Python поставляется с небольшим веб-сервером IIRC.

gbjbaanb
источник
Я работаю над решением, подобным этому, но есть некоторые проблемы, когда браузер пытается подключиться через веб-сокет с веб-страницы из интернет-домена (www.mydomain.com) к локальному веб-сокет-серверу, особенно если веб-страница обслуживается HTTPS требует, чтобы сервер веб-сокетов был настроен на использование wss (WebSocket с SSL). Если вы используете самозаверяющий сертификат для «защиты» сервера веб-сокетов, браузеру не понравится ваше подключение к веб-сокетам. Firefox разрешит это, как только вы примете незащищенный локальный сертификат, но другие браузеры не позволят вам так легко подключиться.
Дэвид
1
Для C # в наши дни лучшим встроенным веб-сервером является, вероятно, самодостаточный owin.
Эсбен Сков Педерсен
8

Есть несколько способов смешать нативное приложение и приложение браузера.

Вы можете встроить браузер в собственное приложение, как в приложениях PhoneGap на мобильных устройствах. Это позволит вам расширить движок javascript браузера и делать вызовы между ними.

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

Или, если вам нужна собственная функциональность ... просто создайте одно собственное приложение.

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

GrandmasterB
источник
Данные, которые мне нужны из нативного приложения, относятся к тому, является ли этот компьютер (а не пользователь) приемлемым. Если вы используете обычный веб-сервер в качестве промежуточного пункта, можете ли вы быть уверены, что машина, на которой установлен браузер, является той же самой, что и исходное приложение. Кроме того, полностью согласен, у них не должно быть двух без уважительной причины, но у нас есть свои причины ^ _ ^
Зак Кус
Кроме того, мне неясно, как встраивание браузера в нативное приложение фактически позволило бы установить связь между браузером и нативным приложением
Зак Кус
@ Как я уже сказал, вы можете расширить движок javascript, чтобы они могли общаться друг с другом, как это делает PhoneGap в мобильных приложениях. Вы определяете методы, которые могут быть вызваны JavaScript на странице, которые выполняются нативным приложением, или вызываете функции javascript из нативного приложения.
GrandmasterB
Я думаю, что использование такого встроенного браузера было бы лучшим способом убедиться, что браузер работает на той машине, на которой он должен работать.
GrandmasterB
Технически я бы согласился, что нативное приложение с веб-просмотром - самый простой способ. Однако, согласно этой статье на немецком языке, опубликованной heise Online, в веб- браузере Android для Android 4.3 и ниже имеются серьезные проблемы с безопасностью, которые невозможно исправить.
k3b