javascriptによる攻撃の被害者・加害者にならないために注意すべきこと
はじめに
自分用のメモがてら書いてきます。
僕もまだまだ素人なんで、つっこみ大歓迎です。
目に見えることが真実とは限らない
リンクを使った引っ掛けの例です。
初級:リンク先と表示されている文字が違う
<a href="http://bbb.com">aaa</a>
エロサイトでよく見かけますねw
これは、ステータスバー見れば違うのがすぐわかります。
中級:リンク先と表示されている文字は一緒だけれど、いざ飛ぶと違うページ
<script charset="UTF-8" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js"></script> <script type='text/javascript' language='javascript' charset='utf-8'> Event.observe(window, 'load', function() { var a = $$('a')[0]; Event.observe(a, 'click', function(event) { a.href = 'http://bbb.com'; }); }); </script> <a href="http://aaa.com">aaa</a>
リンクをクリックした瞬間にリンク先を書き換えてます。
この辺から、見た目じゃわかりません。
上級:任意のスクリプト実行
<script charset="UTF-8" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js"></script> <script type='text/javascript' language='javascript' charset='utf-8'> Event.observe(window, 'load', function() { var a = $$('a')[0]; Event.observe(a, 'click', function(event) { $$('form')[0].submit(); Event.stop(event); }); }); </script> <a href="http://aaa.com">aaa</a> <form action="http://bbb.com" style="display:none"> <input name="title" value="爆破します"> <input name="body" value="うそです"> </form>
リンクで飛ぶ代わりに怪しげなフォーム送信しちゃってます。
どうすれば防げる?(ユーザ)
信用できないサイトではjavascriptを無効に。
firefoxなら、ツール->オプション->コンテンツ
から、JavaScriptを有効にするのチェック外せば無効にできます。
ページ単位で有効・無効を切り替えられるアドオンもあります。
https://addons.mozilla.org/ja/firefox/addon/722
どうすれば防げる?(管理者)
上記の例で言うと、フォームデータのリファラ見て不適切な場合は投稿を受け付けない。
フォームにワンタイムトークン仕込んでおく。
さいごに
javascriptは、もっと楽しいことに使おうよ。
許可した処理だけ実行可能にするUserScript欲しいな。