Chrome では、安全でない送信元での位置情報などの強力な機能のサポートを終了する公開の意向を表明しています。他のブラウザもこれに追随することを願っています。
Chrome 50 以降、Chrome では、安全でない接続で配信されるページから HTML5 Geolocation API を使用してユーザーの位置情報を取得することがサポートされなくなりました。つまり、Geolocation API 呼び出しを行うページは、HTTPS などの安全なコンテキストから配信する必要があります。
これは、位置情報 API の使用を必要とし、https 経由で提供されていないすべてのサイトに直接影響するため、重要な問題です。しかし、これはウェブ上のすべてのユーザーにとって有益な変更であると考えています。この投稿では、その理由と対処方法について説明します。
いつ変更されますか?
この変更は Chrome 50(2016 年 4 月 20 日午後 12 時(太平洋標準時))より有効になります。
Chrome のデベロッパー ツール コンソールでは、バージョン 44(2015 年 7 月 21 日リリース)以降、警告が表示されています。
この変更を行う理由(および議論)について説明する公開のお知らせがいくつかあります。
- HTTP を介した強力な機能のサポート終了に関するお知らせ(2015 年 2 月)
- HTTP を介した Geolocation API のサポート終了に関するお知らせ(2015 年 11 月)
- Chrome Dev Summit(2016 年 11 月)
- Chrome ベータ版チャンネル リリース ブログ(2016 年 3 月 17 日)
- Chrome ステータス ウェブサイト
Mobiforge(2016 年 1 月 26 日)、Wired(2016 年 3 月 17 日)、VentureBeat(2016 年 4 月 13 日)など、この問題を強調している情報源は他にも多数あります。
この変更を行う理由
位置情報はセンシティブ データです。HTTPS の必須化は、ユーザーの位置情報のプライバシーを保護するために必要です。ユーザーの位置情報が安全でないコンテキストから取得可能になると、ネットワーク上の攻撃者はユーザーの位置を把握できるようになります。これはユーザーのプライバシーを深刻に侵害します。
どのようなユーザーに影響がありますか。
これは、HTTP(非セキュア)経由で配信されるページで現在 Geolocation API を使用しているすべてのページに影響します。また、HTTP ページに埋め込まれている場合、Geolocation API を使用する HTTPS iframe にも影響します。(共有 HTTPS 配信フレームを使用してポリフィルすることはできません)。
ウェブアプリ全体で HTTPS が必要ですか?
位置情報を使用するには、アプリ全体を HTTPS 経由で配信する必要はありません。位置情報を使用するページのみを、セキュアなコンテキストで配信する必要があります。現在、安全なコンテキストとは、HTTPS または localhost の最上位レベルでホストされているものすべてです。たとえば、安全なオリジンを指しているが、安全でないオリジン(http ://paul.kinlan.me/)でホストされている iframe は、位置情報 API を呼び出すことはできません。
強力な新機能と既存のブラウザ機能には安全なオリジンが必要となるため、HTTPS に移行することを強くおすすめします。
これはローカル開発に影響しますか?
いいえ。localhost は仕様で「潜在的に安全」と宣言されています。この場合、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 API、GeoIP(例として、地理ベースの他のソリューションもあります)、ユーザーが入力した郵便番号などです。ただし、位置情報への継続的なアクセスを確保するには、HTTPS に移行することを強くおすすめします。