クリックジャッキング対策、あるいはクリックジャッカーをジャックする方法

クリックジャッキングというのが話題になってるみたい。

全ての人にとって有効な防御策がなかなか見あたらないみたいで
おそろしいですね。

せめて自分が運営しているサイトが
その対象にならないようにしたいところ。

というわけで
こういう JavaScript を仕込んでおいてはどうかと思います。
添削歓迎。
→ご指摘いただいて書き換えました。

if (window.top !== window.self) {
  window.top.location = window.self.location;
}

HTML 内に <script> タグで入れても
外部 JavaScript ファイルでもいいけど、
ともかくこういうことをしておくと
そのサイトが読み込まれたフレームと親フレームが一致しない場合、
要するに勝手にフレームで呼び出されている場合、
親フレーム(=クリックジャッカーのサイト)を乗っ取ることができる。
はず。

もちろんユーザーが JavaScript をオフにしていたら
まったく機能しないから
完全防備はできない。

が、攻撃対象に選ぶとしたら
より多くの人をひっかけられるサイトだろうから
攻撃者はよそに行ってくれるだろう、という逃げ方。
自転車に鍵を2つかけるようなもんか。

しかも攻撃者のブラウザでこれが作動せず
これが仕込まれていることに気づかないまま
クリックジャッキングを仕掛けてくれたら、
攻撃者のサイトを逆に乗っ取ることができるかもしれない。

何かもっと賢い方法あったら教えてください。

  • このエントリーをはてなブックマークに追加

3 Responses to “クリックジャッキング対策、あるいはクリックジャッカーをジャックする方法”

  • 通りすがりのファン

    2009/03/05 14:45

    そのような言葉をこちらで初めて知りました。
    勉強になります。

  • Anonymous

    2009/03/05 17:36

    top.location.href = “(ここに自サイトの URL)”;
    は同一生成元ポリシーに反するのでセキュリティエラーになります。フレーム内に読み込まれたかどうかをチェックするのであれば、twitter.comが行っているように
    window.top !== window.self
    とすべきです。
    また、IE8のクリックジャッキング対策を有効にする為、HTTPヘッダで
    X-FRAME-OPTIONS: SAMEORIGIN
    としておくのも良いと思います。

  • 2009/03/05 18:07

    > 同一生成元ポリシーに反する
    あれ、これは親フレームのドキュメントに対して DOM 操作をしているわけではないのでOKと解釈してるんですが。
    実際エラーが出ずに動作します。どうなんだろ。
    チェックの件は、
    window.top !== window.self
    でいいですね。書き換えました。ありがとうございました。