target="_blank"には気をつけよう
target="_blank"には気をつけよう:
aタグにtarget="_blank"をつけると危険だよと言われたので、忘れないうちにメモメモ。
大抵のブラウザでは、 target=blank_によって"別タブで開かれたページ"が手前に表示され、 "元のページ"は裏に残る。
"別タブで開かれたページ"にて、
が実行されると、裏で"元のページ"が画面遷移される。
オリジンが違ったとしても、リンクをたどってきたユーザを任意のサイトに誘導することが可能。
※
window.opener
リンクのへの rel=noopener 付与による Tabnabbing 対策
reactでaタグの中にtarget='_blank'を書いたらESLintに怒られた話
"元のページ"の
"別タブで開かれたページ"にて、
これにより、"別タブで開かれたページ"では、以下のようなJavaScriptのエラーが表示される。
現在、未対応のブラウザもある
https://caniuse.com/#feat=rel-noopener
現在、
その代替として
https://caniuse.com/#feat=rel-noreferrer
毎回記述するのも面倒だし忘れそうなので、自動付与するのもあり。
BabelPluginによりリンクへrel=noopenerを自動的に付与する
現状では、クロスドメイン対応していても問題なし。_gaパラメータも問題なく付与されている。
リンクを作る時の target="_blank" の危険性
かなり参考になりました。
経緯
aタグにtarget="_blank"をつけると危険だよと言われたので、忘れないうちにメモメモ。
危険な理由
「リンクを開いた先のページでのJavaScriptによって、開いた元のページを操作できてしまう」
大抵のブラウザでは、 target=blank_によって"別タブで開かれたページ"が手前に表示され、 "元のページ"は裏に残る。"別タブで開かれたページ"にて、
window.opener.location="./hogehoge.html"
オリジンが違ったとしても、リンクをたどってきたユーザを任意のサイトに誘導することが可能。
※
window.opener
は、"別タブで開かれたページ"を開いた"元のページ"への参照を返すらしい。。。window.opener
フィッシング詐欺攻撃の例
リンクのへの rel=noopener 付与による Tabnabbing 対策
ESLint(eslint-plugin-react)でもエラーになるみたい
reactでaタグの中にtarget='_blank'を書いたらESLintに怒られた話
対策
「target="_blank"
に対してrel="noopener noreferrer"
を付与」
noopener
とは
"元のページ"のtarget="_blank"
に対してrel="noopener"
と付与することで、"別タブで開かれたページ"にて、
window.opener
で参照できなくなり、"元のページ"のlocationの変更などを抑止することが可能である。これにより、"別タブで開かれたページ"では、以下のようなJavaScriptのエラーが表示される。
Uncaught TypeError: Cannot set property 'location' of null
https://caniuse.com/#feat=rel-noopener
noreferrer
とは
現在、noopener
未対応のブラウザもあるので、その代替として
noreferrer
を指定することで同じ挙動が実現できる。https://caniuse.com/#feat=rel-noreferrer
Babelで自動付与
毎回記述するのも面倒だし忘れそうなので、自動付与するのもあり。BabelPluginによりリンクへrel=noopenerを自動的に付与する
Google Analyticsへの影響
現状では、クロスドメイン対応していても問題なし。_gaパラメータも問題なく付与されている。
参考
リンクを作る時の target="_blank" の危険性かなり参考になりました。
コメント
コメントを投稿