クリックジャッキング[X-FRAME-OPTIONS]

2016年2月20日

PHP

クリックジャッキング(クリックジャック攻撃)とは、透明表示機能などによって見えないページを準備し、そのページ上にあるボタンをユーザにクリックさせることによって、思わぬ損害を与えるような攻撃のことです。

 

 

スポンサーリンク

 

 

下記のイラストをご覧下さい。「表向きは普通のサイトだが…」が下部にあり「アメゾン購入サイト」が上部に配置されています。しかし、もし上部の「アメゾン購入サイト」がたんに透明でユーザからは見えなかったらどうでしょう。それを実現したのが下記のデモ画面です。

 

クリックジャッキング

 

 

デモ画面

 

デモ画面では、下にtrap.html(表向きは普通のサイト)があり、その上にamezon.php(アメゾン購入サイト)がiframeによって配置されています。

 

amezon.phpはCSSの透過設定によってユーザからは見えないのですが、「登録する」ボタンをクリックしようとすると、その上にちょうど重なっている「購入する」ボタンがクリックされてしまう、という仕組みになっています。

 

amezon.php(アメゾン購入サイト)自体の画面は以下のデモ画面になります。

 

デモ画面(アメゾン)

 

デモ画面のコードは下記のようになります。trap.htmlをローカルの環境で保存し、ブラウザで見てもデモ画面と同じような動作を確認することができます。

 

trap.html(表向きは普通のサイト)

 

amezon.php(アメゾン購入サイト側)

 

 

対処方


 

上記の例で言えば、被害者は「アメゾン購入サイト」側でもあります。クリックジャッキング対策としては、iframe上にページを表示させないようにする方法が有効となります。これは、基本的には、X-FRAME-OPTIONS ヘッダを記述することによって実現できます。

 

上記コードのamezon.phpの2・3行目に着目して下さい。

 

2行目(SAMEORIGIN)側を有効にすると同一ドメイン以外ではiframeには表示されなくなります。つまりデモ画面で言えば、本ブログの「http://noumenon-th.net/」以外では、amezon.phpはifreme上には表示されなくなります。

 

試しにこのSAMEORIGINを有効にしたamezon.phpページを下記デモ画面にて用意しました。このページのURLを、先のtrap.htmlのiframeに設定して下さい。今度は「購入する」ボタンは作動しないはずです。

 

デモ画面(SAMEORIGINを有効にしたアメゾン)

 

また3行目(DENY)側を有効にすると、たとえ同一ドメイン上であってもiframeには表示されなくなります。

 

 

参照ページ


 

IPA 「クリックジャッキング」に関するレポート(PDF)

 

 

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー