この章は、セキュリティに関する内容です。
2004/10に、MozillaからFirefoxのプレビュリリースが発表されました。朝日新聞でも紹介されたり、数日で400万ダウンロードがあったり、ブラウザ戦争再燃などと、一部で騒がれています。
さて、このWebブラウザには、あまり知られていない(かもしれない)DOMインスペクタというツールが、標準で付いてきます。
このツールがなにをするものかというと、表示中のページを解析して、ページ内の構造をわかりやすく、ツリー形式に表示してくれます。
また、ツリーの中の特定のタグをクリックすると、表示中のページで該当する部分が、ブリンクしたりします。
表示が壊れてしまったHTMLドキュメントから、原因となる部分を見つける等、結構使えるツールではあります。
ところでこのツール、実は表示中のページの内容を、変更することもできてしまいます。これは、ソースレベルで変更するわけではなく、丁度フレームなどに読み込んだHTMLを、スクリプトを使って書き換えるのと同じです。
セキュリティとなにが関係するの?と思ったあなたは、ちょっと危険かもしれません。DOMインスペクタを使えば、簡単にhidden項目を変更できるからです。
hidden項目は、ページ間の情報伝達など、Webアプリケーションにはなくてはならないものですが、セキュリティ上問題になるような部分で使うというのは、御法度です。
次のような場合を考えてください。
ユーザが適当な条件で検索を行い、一覧表示します。そこからレコードを選択して、詳細表示を行うと、詳細な内容が表示されるという、よくありがちな処理です。
このとき、ユーザによって参照可能なレコードとそうでないレコードがあるとします。どのようなロジックになるでしょうか?
もし、5.の処理で参照可能かチェックを行っていないとすると、埋め込んだ伝票番号を書き換えられば、どの伝票でも参照することができてしまうことになります。
これは一例ですが、伝票番号が承認を行う上長のIDだったり、決済後の金額だったりした場合は、それこそ大問題でしょう。
クライアント側で、データの改竄ができてしまうという問題は、なにもWebアプリケーションだけのものではありません。
JavaだろうとCだろうとVBだろうと、プログラムである以上、何らかの方法(例えばデバッガ)でメモリ内の値を改竄するのは、不可能ではありません。coreファイルから、情報が漏れるというケースとにています。
しかし、プログラマの中でも、デバッガを使ってメモリのをスキャンして、必要な内容を書き換えられる人は少ないでしょう。ましてやプログラムの事などなにも知らない場合は、まず不可能です。
しかし、HTMLで画面を作っている以上、誰にでも改竄が可能であることを、意識して設計しなければなりません。リストラの腹いせにドッカーン!!とやられてしまうような、Webアプリケーションを、リリースしてしまいませんように。
消費者向け電子商取引サイトの運用における注意点の「消費者向け電子商取引サイトの運用における注意点(PDF)」は、注意しなければならない内容が簡潔に纏められています。
尤も、これだけ気を付ければ完璧!なんて事はありませんけど。
このページは、もう少し追記します。たぶん...