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

Paul Kinlan
Paul Kinlan

Chrome は、保護されていないオリジンの位置情報などの強力な機能を非推奨にすることを公然としています。Google は今後、他の機能もリリースすることを期待しています。

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

この変更は、Geolocation API を使用する必要があり、HTTPS 経由では提供されないサイトに直接影響するため、重大な問題ですが、今回の変更はウェブ上のすべてのユーザーにとって有益であると考えられます。この投稿はその理由と 進め方を理解するのに役立ちます

いつ変更されますか?

この変更は Chrome 50(2016 年 4 月 20 日午後 12 時(太平洋標準時))から有効になります。

Chrome のデベロッパー ツール コンソールでは、バージョン 44(2015 年 7 月 21 日リリース)以降、警告が表示されていました。
この変更を行う理由(および議論)について説明した数多くの公式発表があります。

この件については、Mobiforge(2016 年 1 月 26 日)、Wired(2016 年 3 月 17 日)、VentureBeat(2016 年 4 月 13 日)など、多くの情報源で取り上げられています。

この変更を行う理由

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

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

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

ウェブアプリ全体で HTTPS を使用する必要がありますか?

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

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

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

そうすべきではありません。仕様では localhost が「安全である可能性がある」と宣言されているため、localhost を介してトップレベルで提供される位置情報リクエストは引き続き機能します。

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

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

この安全なコンテキストの問題に起因するエラーは、code の 1 を返します。これは「Permission Denied Error」です。このエラーは、ユーザーがアクセスを拒否した場合や、システムがユーザーの位置情報へのアクセスを拒否した場合に表示されます。つまり、メッセージを確認して正確な理由を確認する必要があります。

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

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

ページが HTTPS であっても、安全でないコンテキストでホストされている iframe 内にある可能性があるため、ページの出所だけを確認することはできないので注意してください。

Geolocation の使用が本当に必要であり、どうすればよいか

HTML5 Geolocation API を使用する場合、またはサイトですでに Geolocation API を使用している場合は、Geolocation API 呼び出しを行うページを HTTPS に移行して、安全なコンテキストで使用されていることを確認してください。

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