Политика и правила безопасности для разработчиков

Саймон Хангл
Simon Hangl
Демиан Рензулли
Demián Renzulli

Изолированные веб-приложения (IWA) обеспечивают модель безопасности, которая позволяет веб-приложениям получать доступ к мощным возможностям, таким как прямые сокеты и управляемые кадры , — которые обычно ограничены в стандартной среде веб-безопасности. Поскольку IWA работают в среде с высоким уровнем доверия, они должны соответствовать строгим политикам безопасности и конфиденциальности. Эти рекомендации разработаны для того, чтобы гарантировать, что по мере роста возможностей веб-платформы пользователи остаются в безопасности, а целостность браузерной среды сохраняется.

Модель доверия IWA

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

В обмен на подтвержденную личность, IWA получают доступ к привилегированным API. Для поддержания этого доверия разработчики должны придерживаться подхода, ориентированного на безопасность, соблюдая более строгие политики, включая надежную политику безопасности контента (CSP) и доверенные типы, которые гарантируют безопасность пользователей даже при использовании мощных возможностей. Это означает:

  • Прозрачность: Пользователи никогда не должны быть удивлены использованием приложением привилегированных API.
  • Принцип наименьших привилегий: приложения должны запрашивать и использовать только те конкретные возможности, которые необходимы для их заявленной цели.
  • Статическая целостность: вся исполняемая логика должна быть самодостаточной внутри пакета приложения, чтобы обеспечить возможность аудита безопасности и предотвратить установку вредоносного кода из сторонних источников .

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

Почему эти рекомендации важны

Соблюдение этих правил — это не просто соответствие требованиям, это создание устойчивой экосистемы для передовых веб-приложений. Следуя этим рекомендациям, вы гарантируете, что ваше приложение:

  • Предотвращает регрессии в системе безопасности: предотвращает уязвимости, такие как межсайтовый скриптинг (XSS) и удаленное выполнение кода, сохраняя логику самодостаточной.
  • Защищает конфиденциальность пользователей: гарантирует, что доступ к конфиденциальным данным и оборудованию осуществляется только с явного согласия пользователя и с соблюдением принципов прозрачности.
  • Обеспечивает долговечность платформы: помогает поддерживать высокие стандарты безопасности, необходимые для дальнейшего расширения функциональных возможностей платформы IWA.

Основные принципы

Прозрачность и намерения пользователя

Самое главное правило: не удивляйте пользователя. Поведение вашего приложения должно соответствовать его заявленному назначению и ожиданиям пользователя.

  • Оставайтесь в рамках заданных параметров : не внедряйте функциональность, выходящую за рамки очевидного назначения вашего приложения.
  • Минимальный объем API-интерфейсов: запрашивайте и используйте только тот набор API IWA, который необходим для выполнения основных функций вашего приложения.

Отсутствие динамической загрузки кода из сторонних источников

Модель безопасности IWA зависит от возможности администраторов или поставщика браузера проверять всю исполняемую логику. Следовательно, ваш пакет IWA должен быть самодостаточным. Платформа обеспечивает это с помощью строгой политики безопасности контента (CSP), которая блокирует выполнение строковых операций, таких как eval() и new Function() :

script-src 'self' 'wasm-unsafe-eval';
require-trusted-types-for 'script';

Хотя CSP разрешает 'wasm-unsafe-eval' поддерживать WebAssembly, вы не должны обходить суть этой границы безопасности.

Строго запрещенные практики

  • Включение интерпретаторов для удаленного кода: Вы не можете включать интерпретатор кода (например, Python или Lua, скомпилированный в WASM) для загрузки и выполнения внешних скриптов с использованием привилегированного сетевого доступа, такого как Direct Sockets .
  • Логика, загружаемая удаленно: Не используйте сервис-воркеры для встраивания кода, загружаемого удаленно, в исходный код IWA.
  • Код против данных: Хотя загрузка данных (например, JSON) разрешена, загрузка любого кода, предназначенного для интерпретации или выполнения, является прямым нарушением правил.

Принцип наименьших привилегий

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

Задача Используйте стандартный веб-API (рекомендуется). Избегайте использования привилегированного API IWA (ограниченный доступ).
доступ к внешнему жесткому диску Используйте API доступа к файловой системе для стандартного ввода-вывода файлов. Не используйте неограниченный доступ к хранилищу через WebUSB .
Взаимодействие со смарт-картой Используйте API смарт-карт . Не используйте Unrestricted WebUSB для смарт-карт.
Последовательная связь между устройствами Используйте API WebSerial, если он подходит для вашего устройства. Избегайте использования неограниченного WebUSB, если WebSerial может выполнить эту задачу.
Встраивание проверенного контента Используйте стандартный <iframe> . Не используйте <controlledframe> для простого встраивания, если изоляция не требуется.

Рекомендации, специфичные для API

API IWA предоставляют мощные возможности, которые обычно ограничены в браузере. Общая рекомендация — никогда не использовать эти привилегированные функции таким образом, чтобы это стало неожиданностью для пользователей или поставило под угрозу их доверие и данные.

API прямых сокетов

API Direct Sockets предоставляет прямой доступ по протоколам TCP и UDP, включая многоадресную рассылку и доступ к локальной сети.

Допустимый

  • Поддержка пользовательских протоколов: подключение к удаленным серверам, использующим пользовательские протоколы, для которых в настоящее время не существует веб-API более высокого уровня.
  • Поддержка серверных служб: подключение к заранее определенному, жестко закодированному серверу, используемому специально для серверных служб вашего приложения.
  • Обнаружение необходимого оборудования: доступ к локальной сети или использование многоадресной рассылки для обнаружения конкретного, связанного оборудования, необходимого для функционирования приложения (например, приложение для редактирования видео находит сетевое хранилище).

Запрещено

  • Удивление пользователя: реализация доступа к сети, которая не имеет явного обоснования в соответствии с основной функциональностью приложения, например, текстовый редактор, взаимодействующий с локальными сетевыми устройствами.
  • Произвольное сканирование сетей: выполнение широкого сканирования локальной сети пользователя (например, сканирование портов 192.168.1.0/24) для составления профиля пользователя или обнаружения несвязанных устройств.
  • Нацеливание на локальные устройства: попытки зондирования, переконфигурирования или атаки на другие устройства в локальной сети строго запрещены.

API управляемого кадра

Элемент <controlledframe> позволяет встраивать и изменять контент из других источников, включая внедрение скриптов и изменение заголовков.

Допустимый

  • Оптимизация пользовательских интерфейсов: встраивание стороннего сервиса и внедрение CSS для скрытия ненужных элементов интерфейса или обеспечения более целостного взаимодействия.
  • Обеспечение безопасной связи: Выполнение роли привратника путем приема запросов от встроенной страницы с помощью postMessage и возврата только очищенных, необходимых данных, полученных через привилегированные API.

Запрещено

  • Кража учетных данных пользователя: внедрение скриптов для перехвата паролей, сессионных файлов cookie или других конфиденциальных данных пользователя из встроенного контента.
  • Нарушение условий предоставления услуг: изменение встроенных платформ способами, нарушающими их Условия предоставления услуг, например, программный клик по рекламе или несанкционированный сбор данных.
  • Проксирование привилегированного доступа: создание сквозного канала , предоставляющего недоверенному встроенному контенту прямой или неконтролируемый доступ к привилегированному API IWA.
  • Внедрение неконтролируемого ИИ: выполнение действий от имени авторизованного пользователя с помощью ИИ без конкретных, прозрачных ограничений по сценарию использования.

Неограниченная запись экрана

Позволяет делать снимки экрана без многократных запросов на разрешение пользователя, которые встречаются в стандартных веб-сервисах.

Допустимый

  • Обеспечение основной функциональности: использование функции захвата экрана как очевидной составляющей работы приложения, например, в функциях записи виртуальных встреч или обучающих видеороликов.
  • Обеспечение осведомленности пользователей: Четко информируйте пользователей о возможности записи до начала работы с приложением.

Запрещено

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

Неограниченный доступ к WebUSB

Технология Unrestricted WebUSB обходит стандартный черный список WebUSB, позволяя осуществлять низкоуровневое взаимодействие с устройствами.

Допустимый

  • Поддержка проприетарного оборудования: взаимодействие со специализированным или устаревшим оборудованием, для которого отсутствует высокоуровневый веб-API, например, с промышленными контроллерами.

Теперь разрешено

  • Обход специализированных API: использование WebUSB для устройств, имеющих более специфический, ограниченный API, таких как смарт-карты (используйте Smart Card API ) или внешние накопители (используйте File System Access API ).

Управление окнами ( window.open и window.focus )

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

Допустимый

  • Уведомление о завершении задачи: фокусировка окна приложения по завершении важной фоновой задачи, инициированной пользователем, например, рендеринга видео.

Запрещено

  • Спам: Засыпание пользователя множеством нежелательных окон.
  • Фишинг: Открытие окон, имитирующих системные диалоги или вводящих пользователя в заблуждение.
  • Перехват фокуса: отвлечение внимания пользователя путем перехвата фокуса у других приложений для некритических событий.

Заключение

Архитектура безопасности изолированных веб-приложений (IWA) разработана таким образом, чтобы расширить возможности разработчиков, сохраняя при этом высокий уровень доверия для пользователей. Следуя этим рекомендациям, вы гарантируете, что ваше приложение останется ответственным участником экосистемы IWA. Наиболее важные выводы из этого руководства:

  • Приоритет — прозрачность: поведение вашего приложения всегда должно соответствовать его заявленному назначению; никогда не внедряйте функциональность, которая может удивить или обмануть пользователя.
  • Обеспечение целостности пакета: вся исполняемая логика должна быть самодостаточной внутри вашего пакета IWA для обеспечения статической проверки. Обход модели безопасности посредством динамической загрузки кода или удаленных интерпретаторов строго запрещен.
  • Придерживайтесь принципа наименьших привилегий: всегда выбирайте наиболее ограниченный API, доступный для данной задачи. Привилегированные API IWA следует использовать только в том случае, если стандартных веб-API недостаточно для основной функциональности приложения.
  • Выступать в роли привратника: при использовании мощных инструментов, таких как <controlledframe> , ваш IWA должен выступать в роли безопасного посредника, а не прозрачного прокси для ненадежного контента.

Перед публикацией вашего IWA проведите заключительную проверку вашей реализации, задав следующие вопросы:

  1. Использую ли я для этой задачи самый простой и наиболее ограниченный API?
  2. Удивит ли пользователя или он почувствует себя обманутым тем, что делает мое приложение?

Если на первый вопрос вы ответили «Нет», а на второй — «Да», ваше приложение, вероятно, нарушает политику безопасности IWA и может быть удалено.