プライベート ネットワーク アクセスとは
プライベート ネットワーク アクセス(PNA、旧称 CORS-RFC1918、略称ローカル ネットワーク アクセス)は、プライベート ネットワーク上のサーバーにリクエストを送信するウェブサイトの機能を制限するセキュリティ機能です。これにより、クロスサイト リクエスト フォージェリ(CSRF)などの潜在的な攻撃からユーザーと内部ネットワークを保護できます。Chrome では PNA を段階的に実装しており、今後のリリースで保護機能を拡張する予定です。
主要な PNA 保護(現在のステータスを含む)
- セキュアなコンテキスト: プライベート ネットワークのサブリソース リクエストを行えるのは、セキュアなコンテキストのみです(Chrome 94 以降で適用)。詳細については、プライベート ネットワーク アクセスの更新に関する投稿をご覧ください。
- プリフライト リクエスト: Chrome はプライベート ネットワークのサブリソース リクエストの前にプリフライト リクエストを送信し、サーバーの権限を確認します(Chrome 104 以降で失敗すると DevTools に警告。Chrome 130 で適用されます)。これについては、プライベート ネットワーク アクセス: プリフライトの概要で説明されています。Chrome 123 以降では、PNA によってのみプリフライトが作成、送信される場合、
Accept
などの一部の CORS ヘッダーが省略されます。 - 同一オリジンの除外: Chrome 115 以降、信頼できる可能性があるオリジンからの同一オリジン リクエストは PNA 制限から除外されます。
保護の強化: ウェブワーカー
PNA 保護はウェブワーカー(専用ワーカー、共有ワーカー、Service Worker)にも適用されます。該当するものは次のとおりです。
- ワーカー スクリプトの取得: 公開されていない 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 がナビゲーション リクエストをブロックすると、特定のエラーが表示され、手動で再読み込みしてリクエストを許可するオプションが表示されます。
ウェブサイトが影響を受ける場合の対処方法
投稿「プライベート ネットワーク アクセス: プリフライトの導入」にガイダンスが記載されています。ナビゲーション リクエストの場合、次の点に注意してください。
Access-Control-Allow-Origin
をワイルドカード("*"
)にすることはできません。Access-Control-Allow-Credentials
は"true"
に設定する必要があります。
次のステップ
- WebSockets: Chrome 126 以降、暫定的に PNA が WebSocket handshake に対応する予定です(最初に警告)。
- 全面的な適用: Chrome 130 では、すべての PNA の制限が一時的に適用されます(ポリシーに準拠していないリクエストがブロックされます)。ユーザーは、信頼できるサイトの PNA をオーバーライドするサイト設定を利用できるようになります。
プライベート ネットワークのユースケースに関するフィードバック
ウェブサイトをプライベート ネットワークでホストしていて、パブリック ネットワークからのリクエストを必要とする場合は、Chrome チームがフィードバックをお寄せください。Chromium Issue Tracker(コンポーネント: Blink> SecurityFeature> CORS> PrivateNetworkAccess)で問題を報告します。
写真撮影: Jakub Îerdzicki(Unsplash)