プライベート ネットワーク アクセス: ウェブワーカーとナビゲーション フェッチに対する保護の強化

Jonathan Hao
Jonathan Hao

プライベート ネットワーク アクセスとは

プライベート ネットワーク アクセス(PNA、旧称 CORS-RFC1918、略称ローカル ネットワーク アクセス)は、ウェブサイトが限定公開ネットワーク上のサーバーにリクエストを送信する機能を制限するセキュリティ機能です。これにより、クロスサイト リクエスト フォージェリ(CSRF)などの潜在的な攻撃からユーザーと内部ネットワークを保護できます。Chrome では PNA を段階的に実装しており、今後のリリースで保護機能を拡張する予定です。

主な PNA 保護(現在のステータスを含む)

  • 安全なコンテキスト: プライベート ネットワークのサブリソース リクエストを行うことができるのは、安全なコンテキストのみです(Chrome 94 以降)。詳しくは、プライベート ネットワーク アクセスの更新に関する投稿をご覧ください。
  • プリフライト リクエスト: Chrome は、限定公開ネットワークのサブリソース リクエストの前にプリフライト リクエストを送信して、サーバー権限を確認します(Chrome 104 以降、失敗した場合は DevTools に警告が表示され、Chrome 130 で適用されます)。この点については、プライベート ネットワーク アクセス: プリフライトの導入で説明しています。Chrome 123 以降では、プリフライトが PNA によってのみ作成および送信される場合、Accept などの一部の CORS ヘッダーが省略されます。
  • 同一オリジンの例外: Chrome 115 以降、信頼できる可能性のあるオリジンからの同一オリジン リクエストは PNA の制限の対象外です。

保護の強化: ウェブワーカー

PNA 保護は、ウェブワーカー(専用ワーカー、共有ワーカー、サービスワーカー)にも適用されます。これには以下が該当します。

  • ワーカー スクリプトの取得: 一般公開されていない IP アドレスには、安全なコンテキストとプリフライトが必要です。Chrome 110 以降、Chrome 130 で適用される警告。
  • ワーカー スクリプトによって開始される取得: ワーカー スクリプト内からの取得はすべて、同じ PNA ルールに従います。

Chrome 124 以降では、次の手順で適用をテストできます。

  • chrome://flags/#private-network-access-ignore-worker-errors を無効にする
  • chrome://flags/#private-network-access-respect-preflight-results を有効にする

保護の拡張: ナビゲーションの取得

PNA は、CSRF 攻撃で使用される可能性があるため、ナビゲーション フェッチ(iframe、ポップアップ)にも適用されます。Chrome 123 でエラーの警告が表示されるようになり、Chrome 130 で違反措置が適用される予定です。

Chrome 124 以降では、次の方法で適用をテストできます。

  • chrome://flags/#private-network-access-ignore-navigation-errors を無効にする
  • chrome://flags/#private-network-access-respect-preflight-results を有効にする

PNA がナビゲーション リクエストをブロックすると、ユーザーには特定のエラーが表示され、手動で再読み込みしてリクエストを許可するオプションが表示されます。

<ph type="x-smartling-placeholder">
</ph> PNA が移動リクエストをブロックすると、特定のエラーが表示され、手動で再読み込みしてリクエストを許可するオプションが表示されます。 <ph type="x-smartling-placeholder">
</ph> PNA が移動リクエストをブロックすると、特定のエラーが表示され、手動で再読み込みしてリクエストを許可するオプションが表示されます。

ウェブサイトが影響を受けている場合の対処方法

プライベート ネットワーク アクセス: プリフライトの概要の投稿にガイダンスが含まれています。ナビゲーション リクエストの場合、次の点に注意してください。

  • Access-Control-Allow-Origin はワイルドカード("*")にすることはできません。
  • Access-Control-Allow-Credentials"true" に設定する必要があります。

次のステップ

  • WebSocket: Chrome 126 から、PNA で WebSocket handshake が対象となります(最初は警告)。
  • 完全な適用: PNA のすべての制限が Chrome 130 で暫定的に適用されます(準拠していないリクエストはブロックされます)。信頼できるサイトの PNA をオーバーライドするサイト設定を利用できます。

プライベート ネットワークのユースケースに関するフィードバック

パブリック ネットワークからのリクエストが必要なプライベート ネットワークでウェブサイトをホストしている場合は、Chrome チームにフィードバックをお寄せください。Chromium Issue Tracker(コンポーネント: Blink > SecurityFeature > CORS > PrivateNetworkAccess)で問題を報告します。

写真撮影: Jakub ConverdzickiUnsplash より)