保護されていないオリジンから Geolocation API を削除(Chrome 50)

Chrome には、保護されていないオリジンでの位置情報などの強力な機能のサポートを終了する公的な意図があり、今後も続々と利用されることを期待しています。

Chrome 50 以降では、保護されていない接続によって配信されるページから、HTML5 Geolocation API を使用したユーザーの位置情報の取得がサポートされなくなりました。つまり、Geolocation API 呼び出しを行うページは、HTTPS などの安全なコンテキストから配信する必要があります。

Geolocation API の使用を必要とする https 経由ではなく、すべてのサイトに直接影響が及ぶため、これは重要な問題です。しかし、Google は、ウェブ上のすべてのユーザーにとって有益であると確信しています。この投稿は 理由と進め方の 理解に役立ちます

いつ変更されますか?

この変更は Chrome 50(2016 年 4 月 20 日午後 12 時(太平洋標準時)から適用されます)

バージョン 44(2015 年 7 月 21 日リリース)以降、Chrome のデベロッパー ツール コンソールで警告が表示されるようになっています。
この変更を行う理由(およびディスカッション)については、さまざまな公式発表が行われています。

他にも、Mobiforge(2016 年 1 月 26 日)、 Wired(2016 年 3 月 17 日)、 VentureBeat(2016 年 4 月 13 日)など、さまざまな情報源でこの問題を指摘しています。

この変更を行う理由

位置情報はセンシティブ データです。ユーザーの位置情報のプライバシーを保護するために、HTTPS を必須にする必要があります。ユーザーの位置情報がセキュアでないコンテキストから入手できる場合、ネットワーク上の攻撃者はそのユーザーの現在地を把握できるため、ユーザーのプライバシーが深刻な形で侵害されます。

どのようなユーザーに影響がありますか。

これは、HTTP 経由で(保護されていない)ページで、Geolocation API を現在使用しているすべてのページから影響します。また、Geolocation API を使用する HTTPS iframe が HTTP ページに埋め込まれている場合は、その iframe にも影響します。(HTTPS で配信された共有フレームを使用してポリフィルすることはできません)。

ウェブアプリ全体で HTTPS は必要ですか?

位置情報を使用するために、アプリ全体を HTTPS 経由で提供する必要はありません。位置情報を使用するページのみを、安全なコンテキストで配信する必要があります。安全なコンテキストとは、現在、HTTPS や localhost のトップレベルでホストされているものを指します。たとえば、安全なオリジンを指す iframe が保護されていないオリジン(http ://paul.kinlan.me/)でホストされている場合、位置情報 API を呼び出すことはできません。

強力な新規および既存のブラウザ機能には安全な送信元が必要であるため、HTTPS に移行することを強くおすすめします。

これはローカルでの開発に影響しますか?

ローカルホストは仕様で「潜在的な安全」と宣言されているわけではありません。この例では、localhost を介してトップレベルで実行される位置情報リクエストは引き続き機能します。

位置情報が安全なコンテキストでないためにブロックされたかどうかを実行時に検出できるか

はい。位置情報の仕様では、Geolocation API の失敗コールバックに渡される PositionError オブジェクトを定義します。オブジェクトでは、code プロパティと message プロパティを定義します。

この安全なコンテキストの問題によるエラーの場合、code の 1 が返されます。これは「権限拒否エラー」です。このエラーは、ユーザーがアクセスを拒否した場合、またはシステムがユーザーの位置情報へのアクセスを拒否した場合に発生することがあります。つまり、正確な原因をメッセージで調べる必要があります。

これは今後変更される可能性があるため、非常に不安定な場合がありますが、「安全なオリジンのみが許可されます」という文字列を探すことは、安全でないコンテンツの問題であることを示す強い兆候です。

navigator.geolocation.getCurrentPosition(success => {
    /* Do some magic. */
}, failure => {
    if (failure.message.startsWith("Only secure origins are allowed")) {
    // Secure Origin issue.
    }
});

なお、ページが HTTPS 上にあっても、安全でないコンテキストでホストされた iframe 内にある場合は、ページの参照元を確認するだけでは不十分です。

位置情報を使用する必要があるのですが、どうすればよいですか?

HTML5 Geolocation API を使用する場合、またはサイトですでに Geolocation API を使用している場合は、Geolocation API 呼び出しを行うページを HTTPS に移行して、安全な状況で使用されるようにします。

この変更の影響を受けないユーザーの位置情報を取得するために、Google Maps Geolocation APIGeoIP(他の位置情報ベースのソリューションなど)、ユーザーが入力した郵便番号など、いくつかの代替オプションを利用できます。ただし、位置情報に継続的にアクセスするための最善の方法は、HTTPS に移行することを強くおすすめします