Новый запрос на разрешение для доступа к локальной сети

Крис Томпсон
Chris Thompson

Опубликовано: 9 июня 2025 г.

В рамках спецификации Local Network Access ( CNA) Chrome добавляет новый запрос на предоставление разрешений для сайтов, устанавливающих соединения с локальной сетью пользователя. Цель состоит в защите пользователей от атак типа межсайтовой подделки запросов (CSRF), направленных на маршрутизаторы и другие устройства в частных сетях, а также в ограничении возможностей сайтов использовать эти запросы для определения локальной сети пользователя.

Чтобы понять, как это изменение повлияет на веб-экосистему, команда Chrome запрашивает отзывы у разработчиков, создающих веб-приложения, которые зависят от подключения к локальной сети пользователя или к программному обеспечению, работающему локально на компьютере пользователя. Начиная с Chrome 138, вы можете включить эти новые ограничения, перейдя по адресу chrome://flags/#local-network-access-check и установив флаг в значение "Включено (блокировка)".

Что такое доступ к локальной сети?

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

Появится сообщение с текстом «Найдите и подключитесь к любому устройству в вашей локальной сети».
Пример запроса разрешения на доступ к локальной сети в Chrome.

На многих других платформах, таких как Android , iOS и MacOS, есть разрешение на доступ к локальной сети. Например, вы могли предоставить это разрешение приложению Google Home при настройке новых устройств Google TV и Chromecast.

Какие виды запросов затронуты?

На первом этапе обеспечения доступа к локальной сети мы рассматриваем «запрос к локальной сети» как любой запрос из общедоступной сети к локальной сети или к точке назначения замыкания (loopback).

Локальная сеть — это любой адрес назначения, который разрешается в адреса, зарезервированные для локального использования. Например, частные IPv4-адреса, указанные в разделе 3 RFC1918 (например, 192.168.0.0/16 ), префикс «локального канала» IPv4 ( 169.254.0.0/16 ), определенный в RFC3927 , префикс «уникального локального адреса» IPv6 ( fc00::/7 ), определенный в разделе 3 RFC4193 , префикс «локального канала» IPv6 ( fe80::/10 ), определенный в разделе 2.5.6 RFC4291 , или IPv4-отображенный IPv6-адрес ( ::ffff:0:0/96 ), где сам отображенный IPv4-адрес является локальным.

Loopback — это любой адрес назначения, который разрешается в локальный компьютер (т.е., интерфейс «loopback»), например, префикс loopback IPv4 ( 127.0.0.0/8 ), определенный в разделе 3.2.1.3 RFC1122 , или loopback IPv6 ( ::1/128 ), определенный в разделе 2.5.3 RFC4291 .

Полное соответствие IP-адресов адресным пространствам см. в таблице в спецификации доступа к локальной сети .

Общедоступная сеть — это любое другое место назначения.

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

  • Имя хоста в запросе представляет собой частный IP-адрес (например, 192.168.0.1 ).
  • Запрашиваемое имя хоста — это домен .local .
  • Вызов функции fetch() помечен опцией targetAddressSpace: "local".
// Example 1: Private IP literal is exempt from mixed content.
fetch("http://192.168.0.1/ping");

// Example 2: `.local` domain is exempt from mixed content.
fetch("http://router.local/ping");

// Example 3: Public domain is not exempt from mixed content,
// even if it resolves to a local network address.
fetch("http://example.com/ping");

// Example 4: Adding the `targetAddressSpace` option flags that
// the request will go to the local network, and is thus exempt
// from mixed content.
fetch("http://example.com/ping", {
  targetAddressSpace: "local",
});

Что меняется в Chrome?

Хром 138

Наша начальная версия функции «Доступ к локальной сети» готова к тестированию с возможностью включения в Chrome 138. Пользователи могут включить новый запрос на разрешение, установив параметр chrome://flags#local-network-access-check в значение «Включено (блокировка)». Это позволит запускать запрос на разрешение доступа к локальной сети для запросов, инициированных с использованием API JavaScript fetch() , загрузки подресурсов и навигации по подфреймам.

Демонстрационный сайт доступен по адресу https://lna-testing.notyetsecure.com/ для запуска различных типов запросов к локальной сети.

Известные проблемы и ограничения

  • Соединения WebSockets ( crbug.com/421156866 ), WebTransport ( crbug.com/421216834 ) и WebRTC ( crbug.com/421223919 ) с локальной сетью пока не ограничены правами доступа LNA.
  • Для обработки запросов к локальной сети от сервисных работников и работников, использующих общие ресурсы, необходимо, чтобы источнику запроса работника было предварительно предоставлено разрешение на доступ к локальной сети.
    • Если ваше приложение отправляет запросы к локальной сети через сервис-воркер, вам потребуется отдельно инициировать запрос к локальной сети из вашего приложения, чтобы вызвать запрос на разрешение. (Мы работаем над способом, позволяющим ворккерам запускать запрос на разрешение при наличии активного документа — см. crbug.com/404887282 .)

Chrome 139 и далее

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

Мы также добавим корпоративную политику Chrome для управления тем, какие сайты могут, а какие не могут отправлять запросы в локальную сеть (предварительно предоставляя или запрещая разрешение этим сайтам). Это позволит управляемым установкам Chrome, например, в корпоративных средах, избегать отображения предупреждения для известных сценариев использования или дополнительно ограничить доступ сайтов к запросу разрешения.

Мы планируем продолжить интеграцию разрешения на доступ к локальной сети с различными функциями, позволяющими отправлять запросы в локальную сеть. Например, в ближайшее время мы планируем добавить поддержку доступа к локальной сети для соединений WebSockets, WebTransport и WebRTC.

Более подробная информация будет предоставлена ​​по мере приближения к полноценному запуску локального сетевого доступа в Chrome.

Требуется обратная связь.

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

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

  • Перейдите по адресу chrome://flags#local-network-access-check , установите флаг в значение "Включено (блокировка)" и проверьте, корректно ли ваш веб-сайт отображает запрос на предоставление нового разрешения (и работает ли он как положено после предоставления разрешения).
  • Если у вас возникнут какие-либо проблемы или вы захотите что-то посоветовать, создайте заявку в системе отслеживания ошибок Chromium или в нашем репозитории GitHub со спецификацией LNA . Chrome будет рад услышать ваше мнение.