はじめに
Web開発者としてのキャリアを積んでいくと、いずれはセキュリティ上の問題に遭遇するでしょう。JavaScriptの開発元は数多くの大きなセキュリティホールを見つけては解決してきましたし、ブラウザのベンダ各社は自らセキュリティホールを塞ぐ努力をし、ブラウザ操作のセキュリティを保証するための手段を追加してきました。JavaScriptには、それ自体にセキュリティのためのアプローチがいくつか用意されています。それぞれに長所と短所があるものの、全体として見れば、いずれもかなり成功しています。いくつかのセキュリティ機構はJavaScriptインタプリタに含まれており、またブラウザ自体に含まれているものもあります。開発を始めるときには、何らかのセキュリティ機構の実装が必ず求められます。セキュリティ上の問題点を考慮しておかないと、改竄という問題を招くことになります。これは実際に起こり得ることなので、放置してはいけません。開発時にセキュリティを軽んじると、そのWebサイト(およびそのWebサイトを公開している企業)は改竄の危険にさらされます。セキュリティホールのために危険度が高いという噂が立てば、そのWebサイトのコンテンツはユーザーに利用されなくなるでしょう。
ブラウザはオペレーティングシステムにつながっています。つまり、ユーザーのコンピュータのファイルシステムは悪意あるユーザーのターゲットになり得るということです。JavaScriptを使ってユーザーのディレクトリリストにアクセスすることは完全に可能です。ハッカーはそのことを知っており、これを常套手段として利用しています。セキュリティはまずサーバから始まります。ユーザーはそこからコードをダウンロードし、自分のマシンで実行するからです。そのため、サーバをしっかり管理し、定期的に監視する必要があります。コードをクリーンにし、スレッドが外部アクセスにさらされないようにする必要があります。これは開発者の責任です。
ユーザー側の責任としては、コンテンツを信頼して自分のマシンで実行するかどうかを判断することが挙げられます。コンテンツを信頼してスクリプトを実行するか実行しないかをユーザーが決められるという機能は、ブラウザに含まれる機能であり、ブラウザの環境設定やユーザー設定で指定できます。
フレームの問題
インターネットで最初にフレームが実装されたとき、最初の重大なセキュリティホールの存在がハッキングコミュニティに知られるまでに丸2か月かかりました。フレームがどのように使われてセキュリティホールが生じたのかを理解するためには、まずフレームそのものを理解する必要があります。
Webページでフレームが描画される手順は次のようになります。
- 描画するフレームについての命令を含んだページがロードされる。
- フレームの描画方法を決めるアドレスと詳細(境界のプロパティやフレーム自体の配置など)がブラウザに与えられる。
- フレームの内容となるドキュメントがフレームにロードされる。
- ページがブラウザのウィンドウに描画(表示)される。
この手順では、他のドメインの他のサーバからWebページをロードして実行することが可能です。あるドメインからのJavaScript変数を使って、Webページを構成する他のフレーム内で使用される他のドメインからのWebページに対する検査と修正を行うことができるのです。この問題に対処するための最初の方策は「同一生成元ポリシー(Same Origin Policy)」で、これはNetscape NavigatorとInternet ExplorerとOperaで採用されました。