Есть ли безопасный способ для веб-расширения иметь пользовательский интерфейс внутри вкладки?

#javascript #security #google-chrome-extension #firefox-addon-webextensions #content-script

#javascript #Безопасность #google-chrome-extension #firefox-дополнение-webextensions #контент-скрипт

Вопрос:

веб-расширение браузера может предоставлять пользовательский интерфейс для взаимодействия с пользователем, такой как (боковые панели sidebar_action ) или маленькие значки, которые позволяют всплывать при нажатии browser_action ).

Однако я хотел бы, чтобы мое расширение предоставляло пользовательский интерфейс, отображаемый непосредственно поверх веб-страницы и, следовательно, в центре открытой в данный момент вкладки. Прямо внутри вкладки. Чтобы отобразить что-либо внутри вкладки, я могу использовать content-script и изменять веб-страницы DOM , но мне кажется, что это небезопасный метод, поскольку это откроет возможность для ненадежного кода веб-страницы повлиять на пользовательский интерфейс (например, он может просто удалить созданный пользовательский интерфейс или, что еще хуже, модифицировать его, следовательно, злонамеренно вмешиваться в общение между моим content-script ( web extension ) и пользователем.).

Документация chromium о content-scripts предупреждает, следовательно:

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

Ответ на этот вопрос смотрите в seesk, если,

a) невозможно иметь пользовательский интерфейс в области содержимого веб-страницы, на который также не может влиять javascript веб-страниц (т. Е. DOM всегда может быть изменен как для content-script, так и для javascript веб-страницы) или

б) существует способ представить пользовательский интерфейс внутри области содержимого веб-страницы, при этом «безопасным способом» (имеется в виду ненадежный javascript веб-страниц, который не может повлиять на отображаемый пользовательский интерфейс).

Комментарии:

1. Добавьте элемент iframe на страницу с src, указывающим на html-файл в вашем расширении, объявленном через web_accessible_resources . Эта страница будет изолированной страницей расширения с полными разрешениями (например, фоновая страница или всплывающее окно browserAction). Вы можете найти подробные существующие ответы и даже руководства по этому подходу.

2. @wOxxOm iframe также на короткое время пришел мне в голову в качестве решения, однако как мне убедиться, что (iframe действительно виден и не скрыт под другими DOM элементами). Не сможет ли javascript ненадежной веб-страницы полностью удалить iframe из DOM (а затем переделать поддельную версию пользовательского интерфейса)?

3. Наличие ненадежного способа отображения (такого как наложенный DOM) для веб-расширений кажется довольно проблематичным. Поскольку chromium even решили не предоставлять sidebar-action , а вместо этого побудить вас сразу вставлять на веб-страницы DOM , эта проблема безопасности довольно обескураживает.

4. Вам придется проверить это вручную, например, с помощью MutationObserver и IntersectionObserver.

5. @wOxxOm. ваши комментарии, похоже, показывают путь к возможному решению / ответу. Я обязательно попробую это. Наблюдателям кажется, что злоупотребление / атака с веб-страниц javascript может быть достаточно уменьшена, в то время как iframe уже отключил большой доступ в первую очередь. отлично!