ニュース

「Firefox 79」からtarget=“_blank”なリンクの挙動が変更、より安全な仕様に

「Safari」は実施済み、「Google Chrome」も追随へ

公式ブログ“Firefox サイト互換性情報”

 7月の安定版リリースが予定されている「Firefox 79」では、“target”属性に“_blank”が指定されている“A”要素および“AREA”要素の扱いが変更され、“rel”属性が設定されていない場合、暗黙的に“noopener”が適用されるようになるという。公式ブログ“Firefox サイト互換性情報”で、その詳細が案内されている。

 たとえば、以下のリンクタグ(例1)がある場合、

例1

<a href="http://example.com/" target="_blank">

“example.com”はWebブラウザーの新規ウィンドウ(タブ)で開かれる。開発者は、新しいウィンドウで“window.opener”にアクセスすると、リンク元のウィンドウに関する情報を取得できる。

 しかし、この仕様は悪用の恐れがある。たとえばリンク先(example.com)に悪意あるJavaScriptが仕込まれている場合、リンク元のページが操作(任意のWebページに遷移するなど)されてしまう可能性がある。リンク先が信頼できない第三者サイトの場合はとくに危険だ。

 そのため、最近では“target”属性に“_blank”を指定する場合、以下のように“rel”属性も適切に設定することが推奨されていた(例2)。

例2

<a href="http://example.com/" target="_blank" rel=“noopener”>

 こうしておけば新規ページの“window.opener”には“null(空値)”が設定されるため、リンク元のページを操作することは不可能だ。

 「Firefox 79」以降では現行のHTML仕様に従い、例1のリンクが自動的に例2と同等に評価される。そのため、わざわざ“noopener”を指定するためだけに“rel”属性を記述する必要はなくなり、メンテナンスされていない古いWebページのセキュリティも向上する。プレビュー版では「Firefox 65」以降でこの仕様がデフォルトで有効化されているため、興味のあるユーザーは試してみてほしい。

 なお、Appleは2019年3月公開の「Safari 12.1」でこの変更を導入済み。「Google Chrome」への導入も計画されており、いずれはすべての主要ブラウザーがこの挙動に統一される見込みだ。