クリックジャッキングの動きと対策を確認(Python)

セキュリティのクリックジャッキングの動きと対策を確認します。

確認環境
・Python 3.8.5
・Windows 10

目次

サンプル クリックジャッキング(Clickjacking)とは
  サンプルイメージ
  iframeとは

クリックジャッキング(Clickjacking)とは

  • クリックジャッキングは、以下のような手順です。
  • 1.悪意のあるサイトがiframe内にサイトAを表示します。
  • 2.cssのopacity命令でiframeの表示は見えなくしサイトAとボタン1は見えなくなります。ただし、見えないだけで、サイトAとボタン1はそこにある状態です。
  • 3.偽ボタンをサイトAのボタンの位置に調整して表示します。このとき偽ボタンの表示順は、ボタン1より下にします。つまり偽ボタンを押したと思っても実際はボタン1を押すことになります。これによりユーザーの意図しない結果が生じてしまいます。
  • クリックジャッキング対策としてサイトAは、HTTPレスポンスヘッダーにX-FRAME-OPTIONSを使用してiframeの表示可否を指定します。
X-Frame-Optionsの指定例
X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
X-FRAME-OPTIONSの値
説明
DENY サーバーは、iframeに表示することを拒否します。
SAMEORIGIN サーバーは、同じオリジンのサイトであればiframeに表示することを許可します。
オリジンとはスキーム(http)、ホスト(example.com)、ポート(80)です。

サンプルイメージ

PythonのBottleフレームワークでクリックジャッキング対策をしたサンプルイメージです。

# coding: utf-8

from bottle import route,run,HTTPResponse

@route('/')
def test1():
    html = '<p>テスト「ショップ」のサイト</p>'
    html += '<button type="button"  '
    html += 'onclick="console.log(\'クリックしました\')">買う</button>'
    htr = HTTPResponse(body=html)
    htr.set_header('X-Frame-Options', 'DENY')
    return htr

run(host="127.0.0.1",port='8765')

11行目は、レスポンスヘッダーにX-Frame-OptionsのDENYを指定しています。
このサイトの画面は、iframeに表示されません。

以下のイメージです。

X-Frame-Optionsは、htmlのmetaタグではなく、レスポンスヘッダーに指定します。
webサーバーでは、apacheやIISで指定します。

以下は、MDNのX-Frame-Optionsのリンクです。
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/X-Frame-Options

iframeとは

Inline FRAMEの略です。
自サイトや他サイトのページを、表示しているページに埋め込んで表示できます。

<iframe src="http://127.0.0.1:8765"></iframe>

iframeタグとsrcに対象のアドレスを指定します。

関連の記事

CSRFの動きと対策を確認する(Python)

△上に戻る