公開日: 2025 年 6 月 9 日
Chrome では、ローカル ネットワーク アクセス仕様のドラフトの一環として、ユーザーのローカル ネットワークに接続するサイトに対して新しい権限プロンプトを追加します。この変更は、プライベート ネットワーク上のルーターやその他のデバイスをターゲットとするクロスサイト リクエスト フォージェリ(CSRF)攻撃からユーザーを保護し、サイトがこれらのリクエストを使用してユーザーのローカル ネットワークのフィンガープリントを取得する能力を低減することを目的としています。
この変更がウェブ エコシステムに与える影響を把握するため、Chrome チームは、ユーザーのローカル ネットワークやユーザーのマシンでローカルに実行されているソフトウェアへの接続に依存するウェブ アプリケーションを構築するデベロッパーからのフィードバックを募集しています。Chrome 138 以降では、chrome://flags/#local-network-access-check
に移動してフラグを [有効(ブロック)] に設定することで、これらの新しい制限を有効にできます。
ローカル ネットワークへのアクセスとは
ローカル ネットワークへのアクセスは、ユーザーのローカル ネットワーク上のサーバー(ユーザーのマシンでローカルに実行されているサーバーを含む)にウェブサイトがリクエストを送信する機能を制限します。このようなリクエストを行うには、ユーザーがサイト権限を付与する必要があります。この権限をリクエストする機能は、安全なコンテキストに制限されています。

Android、iOS、MacOS など、他の多くのプラットフォームにはローカル ネットワーク アクセス権があります。たとえば、新しい Google TV デバイスと Chromecast デバイスをセットアップする際に、Google Home アプリにローカル ネットワークへのアクセスを許可している場合があります。
影響を受けるリクエストの種類
ローカル ネットワーク アクセスの最初のマイルストーンで、Google は「ローカル ネットワーク リクエスト」を、パブリック ネットワークからローカル ネットワークまたはループバック デスティネーションへのリクエストと見なします。
ローカル ネットワークとは、IPv4 の RFC1918 のセクション 3 で定義されているプライベート アドレス空間に解決される宛先です(192.168.0.0/16
)、マッピングされた IPv4 アドレス自体がプライベートである IPv4 マッピングされた IPv6 アドレス、または ::1/128
、2000::/3
、ff00::/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
)に解決される任意の宛先です。
パブリック ネットワークは、他のすべてのデスティネーションです。
ローカル ネットワークへのアクセス権は安全なコンテキストに制限されており、ローカル ネットワーク デバイスを 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://local-network-access-testing.glitch.me/ で利用できます。
既知の問題と制限事項
- 新しい権限プロンプトは現在、パソコン版 Chrome でのみ実装されています。現在、Android Chrome への移植に取り組んでおります。(crbug.com/400455013 でトラッキング中)。
- ローカル ネットワークへの WebSocket(crbug.com/421156866)、WebTransport(crbug.com/421216834)、WebRTC(crbug.com/421223919)接続は、まだ LNA 権限で制限されていません。
- 現在、Service Worker からのローカル ネットワーク リクエストでは、Service Worker のオリジンにローカル ネットワーク アクセス権が付与されている必要があります。
- アプリがサービス ワーカーからローカル ネットワーク リクエストを送信する場合、現在のところ、権限プロンプトをトリガーするには、アプリからローカル ネットワーク リクエストを別途トリガーする必要があります。(アクティブなドキュメントが利用可能な場合に、ワーカーが権限プロンプトをトリガーできるようにする方法に取り組んでいます。crbug.com/404887282 をご覧ください)。
Chrome 139 以降
ローカル ネットワークへのアクセスは、できるだけ早くリリースする予定です。一部のサイトでは、ローカル ネットワーク アクセスのアノテーションを追加するためにさらに時間がかかる可能性があることを認識し、ローカル ネットワーク アクセスをデフォルトでリリースする前に、オリジン トライアルを追加して、サイトがセキュア コンテキストの要件を一時的にオプトアウトできるようにします。これにより、特に HTTP を介したローカル ネットワーク リソースへのアクセスに依存している場合、デベロッパーにとってより明確な移行パスが提供されるはずです(ローカル ネットワーク アクセスの混合コンテンツの除外をまだサポートしていないブラウザで HTTPS ページからリクエストされた場合、これらのリクエストは混合コンテンツとしてブロックされるため)。
また、ローカル ネットワーク リクエストを実行できるサイトとできないサイトを制御する Chrome エンタープライズ ポリシーも追加されます(サイトへの権限を事前に付与または事前に拒否)。これにより、企業環境などの管理対象の Chrome インストールでは、既知の想定されるユースケースで警告が表示されないようにしたり、さらにロックダウンしてサイトが権限をリクエストできないようにしたりできます。
ローカル ネットワーク アクセス権限は、ローカル ネットワークにリクエストを送信できるさまざまな機能と引き続き統合される予定です。たとえば、WebSocket、WebTransport、WebRTC 接続用のローカル ネットワーク アクセスをまもなくリリースする予定です。
Chrome でローカル ネットワーク アクセスが完全にリリースされる時期が近づきましたら、改めてお知らせいたします。
フィードバックを求めている
プライベート ネットワーク アクセスの開発に関する以前のフィードバックは、新しいローカル ネットワーク アクセス権限のアプローチを決定するうえで非常に有益でした。長年にわたり関わってくださった皆様に改めて感謝申し上げます。
ユーザーのローカル ネットワークまたはユーザーのマシンでローカルに実行されているソフトウェアへの接続に依存するウェブサイトを開発している場合や、そのようなウェブサイトのユーザーである場合は、Chrome チームにフィードバックとユースケースをお知らせください。次の 2 つの方法でサポートできます。
chrome://flags#local-network-access-check
に移動し、フラグを [有効(ブロック)] に設定して、ウェブサイトが新しい権限プロンプトを正しくトリガーし、権限を付与した後に想定どおりに動作するかどうかを確認します。- 問題が発生した場合やフィードバックがある場合は、Chromium Issue Tracker または LNA 説明 GitHub リポジトリで問題を報告してください。Chrome へのご意見をお待ちしております。