ブログ

知らなかった aタグに target=”_blank” の脆弱性。使う時は rel=”noopener” をつけとこう。

知らなかった aタグに target=”_blank” の脆弱性。使う時は rel=”noopener” をつけとこう。

こんにちは、Webデザインしてます。イケダです。

ワードプレスでブログを書き始めて、数ヶ月。外部リンク別ウィンドウで表示するために、aタグで target=”_blank” を頻繁に使います。

web業界に入って、仕事でも何年も普通に使っていたのですが。最近になって、 target=”_blank” 危険性なんて記事を見かけるようになりました。

最初に発見したのは、下記のツイートをした時。

たまたま、ワードプレスで過去の記事をリライトしている時に「あれ?なんか知らんコード入ってる」と気づいたのが最初です。

それが、こちら↓

target=”_blank” rel=”noopener noreferrer”

HTML

2行目です。

<a href="https://canvas-i.com/"
	target="_blank" rel="noopener noreferrer">
	[ テキスト... ]
</a>

ワードプレスで記事を編集するとき、target=”_blank” を使ったところに、自動で rel=”noopener noreferrer” が入るようです。*バージョンにもよります。

「これなんだろう?」と、気になったのでググってみると。次のような記事をみつけました。

以下、そのまま引用。

target=”_blank” を使用して任意のページから別のページにリンクしている場合、リンク元のページとリンク先のページは同じプロセスで動作します。 そのため、リンク先のページで負荷の高い JavaScript が実行されていると、リンク元のページのパフォーマンスが低下するおそれがあります。

また、target=”_blank” にはセキュリティ上の脆弱性もあります。リンク先のページでは window.opener を使用して親ウィンドウのオブジェクトにアクセスしたり、window.opener.location = newURL によって親ページの URL を変更したりできます。

詳細については、The Performance Benefits of rel=noopener をご覧ください。

出典: Tools for Web Developers | Google Developers

ふむふむ。

分かってないやろ?

まず window.opener ってなになに? っと始まり、他にも1.2時間かけて関連記事を読み漁りました。結論から言って理解度は70%くらい。

要は、target=”_blank” で新しいリンク先ウィンドウを開く。そこでjavascriptの “window.opener” なるコードを使うち元の親ウィンドウの内容を操作できてしまう。

もし、リンク先に悪意のあるコードがあるとフィッシング詐欺被害などを受ける可能性があるので危険ですよ、ということ。

ここでは、 やっとくべきことだけを簡単にまとめますね。

気になる方は、さらに「window.opener」とか「target=”_blank” 脆弱性」とかでググっていただくといろいろ出てきます。

必要な対策

結論として、押さえておくことはタイトル通り。

繰り返しですが、 targer=”_blank” を使う際に、rel=”noopener” を入れましょう。

rel=”noopener”

新しく開いたページから window.opener オブジェクトを使って、元ページの操作をさせない指定。

「no opener ノーオープナー」オープナーさせないの意味ですね。

最初「ノーペネアー?」と読んでました(笑) もう覚えました。

rel=”noreferrer”

また、最初にも書きましたが、ワードプレスの記事内で target=”_blank” を使うと、自動で rel=”noopener noreferrer” が入ります。

「noreferrer」は、リファラー情報(リンク元のページの情報)をサーバーに送信しない設定のよう。これもつけておくと安心ですよ。で、ワードプレスでは勝手についてくるようです。

ちなみに、

アフェリエイトをされている方で rel=”noreferrer”がついていると、成果報酬が発生しないという記事も見かけました。対策としては、「target=”_blank”」を使わずにリンクさせる。

こちらを↓

<a href="https://canvas-i.com/"
	target="_blank" rel="noopener noreferrer">
	[ テキスト... ]
</a>

こうする↓

<a href="https://canvas-i.com/">

	[ テキスト... ]
</a>

各ASPでは、問題ないところがほとんどのようですが。こうしておく方がベターかな。

まとめ

調べだして、数時間消耗しました。やることは変わらなかった。

rel=”noopener noreferrer” は付けときましょう。そしたら安全。

それでは、最後までお読みいただきまして、ありがとうございました🙌