ローカル ネットワークへのアクセスに関する新しい権限プロンプト

Chris Thompson
Chris Thompson

公開日: 2025 年 6 月 9 日

Chrome では、ローカル ネットワーク アクセス仕様の一環として、ユーザーのローカル ネットワークに接続するサイト向けの新しい権限プロンプトが追加されます。この変更は、プライベート ネットワーク上のルーターなどを標的とするクロスサイト リクエスト フォージェリ(CSRF)攻撃からユーザーを保護し、サイトがこれらのリクエストを使用してユーザーのローカル ネットワークのフィンガープリントを生成する機能を制限することを目的としています。

この変更がウェブ エコシステムに与える影響を把握するため、Chrome チームは、ユーザーのローカル ネットワークやユーザーのマシンでローカルに実行されているソフトウェアへの接続に依存するウェブ アプリケーションを構築しているデベロッパーからのフィードバックを求めています。Chrome 138 以降では、chrome://flags/#local-network-access-check に移動してフラグを [有効(ブロック)] に設定することで、これらの新しい制限を有効にできます。

ローカル ネットワークへのアクセスとは

ローカル ネットワーク アクセスは、ウェブサイトがユーザーのローカル ネットワーク上のサーバー(ユーザーのデバイスでローカルに実行されているサーバーを含む)にリクエストを送信する機能を制限し、このようなリクエストを行う前にユーザーがサイトに権限を付与することを要求します。この権限をリクエストできるのは、安全なコンテキストのみです。

「ローカル ネットワーク上のデバイスを検索して接続する」というテキストが表示されたプロンプト。
Chrome のローカル ネットワーク アクセス権限のプロンプトの例。

AndroidiOSMacOS など、他の多くのプラットフォームにもローカル ネットワーク アクセス権限があります。たとえば、新しい Google TV デバイスや Chromecast デバイスをセットアップする際に、ローカル ネットワークへのアクセス権を Google Home アプリに付与した可能性があります。

影響を受けるリクエストの種類

ローカル ネットワーク アクセスの最初のマイルストーンでは、「ローカル ネットワーク リクエスト」とは、パブリック ネットワークからローカル ネットワークまたはループバック宛先へのリクエストを指します。

ローカル ネットワークは、IPv4 の RFC1918 のセクション 3 で定義されているプライベート アドレス空間に解決される任意の宛先です(例: 192.168.0.0/16)、マッピングされた IPv4 アドレス自体がプライベートである IPv4 マップ IPv6 アドレス、または ::1/1282000::/3ff00::/8 サブネット外の IPv6 アドレス。

ループバックとは、IPv4 の RFC1122 のセクション 3.2.1.3 で定義されている「ループバック」空間(127.0.0.0/8)、IPv4 の RFC3927 で定義されている「リンクローカル」空間(169.254.0.0/16)、IPv6 の RFC4193 のセクション 3 で定義されている「一意のローカル アドレス」接頭辞(fcc00::/7)、または IPv6 の RFC4291 のセクション 2.5.6 で定義されている「リンクローカル」接頭辞(fe80::/10)に解決される宛先です。

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 の変更点

Chrome 138

ローカル ネットワーク アクセスの初期バージョンが完成し、Chrome 138 でオプトイン テストを実施できるようになりました。新しい権限プロンプトを有効にするには、chrome://flags#local-network-access-check を [有効(ブロック)] に設定します。これにより、JavaScript fetch() API、サブリソースの読み込み、サブフレーム ナビゲーションを使用して開始されたリクエストに対して、ローカル ネットワーク アクセス権限のプロンプトをトリガーできるようになります。

さまざまな形式のローカル ネットワーク リクエストをトリガーできるデモサイト(https://lna-testing.notyetsecure.com/)が用意されています。

既知の問題と制限事項

  • ローカル ネットワークへの WebSocket(crbug.com/421156866)、WebTransport(crbug.com/421216834)、WebRTC(crbug.com/421223919)接続は、まだ LNA 権限でゲートされていません。
  • Service Worker と Shared Worker からのローカル ネットワーク リクエストでは、ワーカーのオリジンにローカル ネットワーク アクセス権限が事前に付与されている必要があります。
    • アプリケーションがサービス ワーカーからローカル ネットワーク リクエストを行う場合、権限プロンプトをトリガーするには、アプリケーションからローカル ネットワーク リクエストを別途トリガーする必要があります。(アクティブなドキュメントがある場合に、ワーカーが権限プロンプトをトリガーする方法を検討しています。crbug.com/404887282 をご覧ください)。

Chrome 139 以降

Google は、ローカル ネットワークへのアクセスをできるだけ早くリリースする予定です。一部のサイトでは、ローカル ネットワーク アクセスのアノテーションで更新するのに時間がかかる可能性があることを考慮して、ローカル ネットワーク アクセスをデフォルトでリリースする前に、サイトが一時的にセキュア コンテキストの要件をオプトアウトできるオリジン トライアルを追加します。これにより、特に HTTP 経由でローカル ネットワーク リソースにアクセスしているデベロッパーにとって、移行パスがより明確になります(ローカル ネットワーク アクセスの混合コンテンツ除外をまだサポートしていないブラウザで HTTPS ページからリクエストされた場合、これらのリクエストは混合コンテンツとしてブロックされるため)。

また、どのサイトがローカル ネットワーク リクエストを行えるか、行えないかを制御する Chrome エンタープライズ ポリシーも追加します(これらのサイトに対する権限を事前に付与または拒否します)。これにより、企業環境などの管理対象の Chrome インストールでは、既知のユースケースで警告が表示されないようにしたり、さらにロックダウンしてサイトが権限をリクエストできないようにしたりできます。

今後も、ローカル ネットワークにリクエストを送信できるさまざまな機能にローカル ネットワーク アクセス権限を統合していく予定です。たとえば、WebSocket、WebTransport、WebRTC 接続のローカル ネットワーク アクセスをまもなくリリースする予定です。

Chrome でローカル ネットワーク アクセスを完全にリリースできる時期が近づきましたら、改めてお知らせいたします。

フィードバックを募集しています

プライベート ネットワーク アクセスの開発に関する以前のフィードバックは、新しいローカル ネットワーク アクセス権限のアプローチを検討するうえで非常に貴重なものでした。長年にわたりご協力いただいた皆様に改めて感謝申し上げます。

ユーザーのローカル ネットワークやユーザーのマシンでローカルに実行されているソフトウェアへの接続に依存するウェブサイトを開発している場合や、そのようなウェブサイトのユーザーである場合は、Chrome チームは皆様からのフィードバックやユースケースに関心があります。次の 2 つの方法でご協力いただけます。

  • chrome://flags#local-network-access-check に移動し、フラグを [有効(ブロック)] に設定して、ウェブサイトで新しい権限プロンプトが正しくトリガーされるかどうか(権限を付与した後に期待どおりに動作するかどうか)を確認します。
  • 問題が発生した場合やフィードバックがある場合は、Chromium Issue Tracker で問題を報告するか、LNA 仕様の GitHub リポジトリで報告してください。Chrome へのご意見をお聞かせください。