セキュリティのクリックジャッキングの動きと対策を確認します。
確認環境 ・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: DENY |
X-Frame-Options: SAMEORIGIN |
値 | 説明 |
---|---|
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に対象のアドレスを指定します。
関連の記事