先日、Google Search Consoleを通してSharedArrayBufferというJavaScriptのオブジェクトを使用しているWebサイトオーナー向けに警告メールが届いたようです。専門的過ぎて全く良く分からない、という人に向けてGoogleは米国現地時間3月19日にSearch Central Blogで説明をしてくれていますので、一応ここでもご紹介しておきます。対象の方やコーダーの方には分かると思いますが、ほとんどの人は理解していなくても良さそうですし、良く分かりません(笑)。
Search Central Blogの和訳
まずは、Search Central Blogに掲載されている内容を和訳してご紹介します。
SharedArrayBufferメッセージについての説明
Google Search Consoleから「New requirements for SharedArrayBuffer」という件名のメールを受け取った方もいらっしゃると思います。このメッセージが紛らわしいというフィードバックを受け、この問題についてもう少し詳しく説明し、次のステップとして何が適切かを判断できるようにしたいと考えました。また、cross-origin isolationの有効化に関するガイドを更新し、詳細を記載しました。
なぜこのようなメッセージが表示されたか?
メッセージが表示されたということは、Webサイト上のJavaScriptがSharedArrayBufferオブジェクトを使用していることが検出されたためです。このオブジェクトが使用されているのは、Webサイトに含まれるフレームワークやライブラリ、その他の第三者のコンテンツである可能性があります。
SharedArrayBufferとは何か?
SharedArrayBufferは、Webサイトのスレッド間でメモリ空間を共有するためのJavaScriptのオブジェクトです。Spectreと呼ばれる脆弱性が発見される前からWebサイトで使用されていました。しかし、SpectreはCPUレベルの脆弱性であり、まだまだ改善される見込みがないため、ブラウザ側でSharedArrayBufferオブジェクトを無効にすることを決定しました。
デスクトップではChromeが暫定的にSite Isolationで機能を再有効化したものの、SharedArrayBufferオブジェクトを安全に有効化する方法としてCross-Origin Isolationを標準化することにしました。2021年5月下旬にリリースが予定されているChromeバージョン91から、Chromeはcross-origin isolationがないと、SharedArrayBufferオブジェクトが機能しないようになります。Firefoxではバージョン76で、既にcross-origin isolation環境上でSharedArrayBufferオブジェクトを有効になっています。他のブラウザもこの2つに追随していくことを期待しています。
自身のサイトでのSharedArrayBufferオブジェクトの使用有無を見つける
2つの方法があります:
- Chromeデベロッパーツールを使用して、重要なページを検査する。
- (上級者向け)Reporting APIを使用して、レポート内の最終箇所に回避報告を送信する。
上記のアプローチ方法は、WebサイトのどこでSharedArrayBufferが使用されているかを判断するのにご活用ください。
次のステップ
次のステップとして以下を推奨します。
- WebサイトのどこでSharedArrayBufferオブジェクトが使用されているかを判断する。
- その使用が必要であるかどうかを判断する。
- 機能を削除するか、cross-origin isolationを有効にすることで問題を解決する。
SharedArrayBufferオブジェクトについて聞いたことがなく、Search Consoleのメッセージを受け取った場合は、Webサイト上の第三者のリソースが使用している可能性が高いです。影響を受けるページとリソースの所有者を特定したら、リソースの提供者に連絡を取り、問題の修正を依頼してください。
Chrome 91がリリースされると、Cross-Origin isolationを持たないSSharedArrayBufferオブジェクトは機能しなくなります。実際にそのサイトのChromeユーザーには、SharedArrayBufferオブジェクトがサポートされていない状態の表示になり、パフォーマンスが低下する可能性があることを意味します。
今回のメッセージを受け取らなかった方も、この説明がお役に立てば幸いです。ご不明な点がありましたら、Search Centralヘルプコミュニティに投稿し、他の専門家の意見を聞くことをお勧めします。
引用)Search Consoleヘルプより和訳
簡単に私の言葉でご説明します。
JavaScriptの中でオブジェクトとして使用されるSharedArrayBufferは、(簡単に言うとデバイスがバグる)Spectre(スペクター)というCPUの脆弱性がありました。これはCPUに関わる話なので、すぐにどうこう対応できるものではなく、基本的にブラウザ側で無効化するように対応をしていました。そんな中、2018年9月に、Chromeでは、Site Isolationというセキュリティ機能を用いることで、SharedArrayBufferを機能できるようにしていました。しかし今回、SharedArrayBufferを安全に利用するために、Cross-Origin Isolationの設定をすることで、SharedArrayBufferを機能させるルールを策定したようです。
ですので、今年の5月下旬にリリースされるChrome 91から、このCross-Origin Isolationが設定されていないと、SharedArrayBuffer機能を無効化します、という警告内容です。
ただ、Googleからの警告メールではどこにSharedArrayBufferが使用されているか指摘してくれません。そこで、サイトオーナー側はChromeデベロッパーツールでSharedArrayBufferがどこに使用されているか特定し、必要か不要か判断した上で、Cross-Origin IsolationをHTTPヘッダーで設定するなり、そもそもSharedArrayBufferを削除するなりして対応しましょう、という話です。
ただ得てして、身に覚えがない場合、サイト内に入れ込んでいる広告の中やタグの中にSharedArrayBufferオブジェクトが入り込んでいるケースがあります。その場合は広告配信元に連絡して対処してもらうか、その広告やタグを使わないかしなければなりません。
何も対処しないままSharedArrayBufferを使用している場合は、その部分がバグるか表示されなくなるかと思います。
そこまで特別な話ではなく、使用注意の話
過去にもこういった特殊なオブジェクトに関する注意喚起をGoogle(Chrome)がすることはありました。なので、今回のSharedArrayBufferも同様の話です。通知が来たWebマーケターで、詳しくない人はそのままコーダーに相談しながら対処すると良いのではないでしょうか。