CSP: upgrade-insecure-requests
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since August 2016.
HTTP の Content-Security-Policy
(CSP) における upgrade-insecure-requests
ディレクティブは、ユーザーエージェントに、すべてのサイトの安全でない URL(HTTP 経由で提供される URL)をセキュリティで保護された URL(HTTPS を介して提供されるもの)で置き換えられたかのように処理するよう指示します。このディレクティブは、書き換えが必要な安全ではない古い URL が多数存在するウェブサイトのためのものです。
メモ: upgrade-insecure-requests
ディレクティブは、 block-all-mixed-content
よりも前に処理され、もし設定されていれば後者は何もしません。どちらかのディレクティブを設定することをお勧めしますが、 HTTP にリダイレクトした後で HTTPS を強制することができない古いブラウザーで HTTPS を強制させたくない限り、両方を指定することはできません。
upgrade-insecure-requests
ディレクティブは、第三者のサイトのリンクを経由してサイトにアクセスしたユーザーが最上位のナビゲーション用に HTTPS にアップグレードされることを保証しないため、 Strict-Transport-Security
(HSTS) ヘッダーを置換せず、ユーザーがSSLストリッピング攻撃の対象にならないように、適切な max-age
を設定するようにしてください。
構文
Content-Security-Policy: upgrade-insecure-requests;
例
HTTP ヘッダーの使用
Content-Security-Policy: upgrade-insecure-requests;
HTML の meta 要素の使用
<meta
http-equiv="Content-Security-Policy"
content="upgrade-insecure-requests" />
HTTP から HTTPS に移行したいドメイン example.com に上記のヘッダーを設定すると、ナビゲーション以外の安全でないリソースリクエスト(ファーストパーティおよびサードパーティのリクエスト)は自動的にアップグレードされます。
<img src="http://example.com/image.png" />
<img src="http://not-example.com/image.png" />
これらの URL は、リクエストが行われる前に書き直されます。つまり、安全でないリクエストがネットワークに侵入しないようにします。なお、リクエストされたリソースが実際に HTTPS 経由で利用可能ではない場合、リクエストは HTTP で代替されずに失敗することに注意してください。
<img src="https://example.com/image.png" />
<img src="https://not-example.com/image.png" />
第三者のリソースへのナビゲーションをアップグレードすると、破壊の可能性が大幅に高まりますので、これらはアップグレードされません。
<a href="https://example.com/">Home</a>
<a href="http://not-example.com/">Home</a>
安全ではないリクエストの発見
Content-Security-Policy-Report-Only
ヘッダーと report-uri
ディレクティブを利用して、強制ポリシーと報告されたポリシーを次のように設定することができます。
Content-Security-Policy: upgrade-insecure-requests; default-src https:
Content-Security-Policy-Report-Only: default-src https:; report-uri /endpoint
このようにして、安全なサイト上の安全でない要求は引き続きアップグレードされますが、監視ポリシーに違反した場合だけが、安全でないリソースがエンドポイントに報告されます。
仕様書
Specification |
---|
Upgrade Insecure Requests # delivery |
ブラウザーの互換性
BCD tables only load in the browser