SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

JavaScriptのセキュリティ問題と対策

JavaScriptコーディング時のセキュリティ対策

  • X ポスト
  • このエントリーをはてなブックマークに追加

同一生成元ポリシー:Internet Explorer方式のセキュリティ

 同一生成元ポリシー(Same Origin Policy)では、あるサーバから送られたJavaScriptコードが、別のサーバ、別のポート、または別のプロトコルから送られたドキュメントのプロパティにアクセスして元のサーバに情報を返すことは禁止されます。同一生成元ポリシーはHTMLドキュメント内の機能スクリプトの実行に不可欠なJavaScript要素に作用するものであり、HTMLドキュメントのすべての要素に作用するわけではありません。同一生成元ポリシーの対象となる(生成元検査をパスしなければならない)要素は次のものです。

  • document ― anchors、applets、cookies、domains、elements、embeds、forms、lastModified、length、referrer、title、URLの各メソッドおよびプロパティの読み書き。form要素の各インスタンスと、LiveConnectを通じてJavaScript関数で使用できるすべてのJava CLASSも検証されます。
  • image ― lowsrcプロパティとsrcプロパティ。
  • layer ― srcプロパティ。
  • location ― locationで使用できるすべてのプロパティ(ただしlocation.xとlocation.yは除く)。
  • window ― findプロパティ。

 一般的なJavaScriptスクリプトのほとんどの機能は、この生成元検査の対象になるプロパティやメソッドを少なくとも1つは使用しなければなりません。そのため、フレーム化されたウィンドウのスクリプトに悪意を持って変更またはアクセスすることはほとんど不可能になります。

 ときには、Webアプリケーションの目的を実現するために、あえて同一生成元ポリシーを犯さなければならないこともあります。この可能性に対応するために例外が設けられています。ページフレームの中に作成および表示されるページ内の情報にアクセスできるようにするには、document.domainステートメントを使って、そのWebアプリケーションが(ひいてはブラウザが)信頼できるドメインを指定します。例えば、「http://developer.walkthegeek.com」を生成元とするページから、「http://www.walkthegeek.com」を生成元とするページ内の変数とスクリプトエンティティにアクセスできるようにするには、関数内で次のステートメントを使用します。

document.domain = "walkthegeek.com";

 このようにしてdocument.domainプロパティを設定すると、ドメインwww.walkthegeek.comとwalkthegeek.comのすべてのサブドメイン(上記のdeveloper.walkthegeek.comなど)からのコンテンツをすべて信頼するようにブラウザに指示することになります。

データ汚染ポリシー:Netscape方式のセキュリティ

 Netscapeは、インターネットユーザーを保護するにはセキュリティを強化する必要があると判断し、既存のどんなセキュリティよりも強力な新しいタイプのセキュリティを導入しました。それが「データ汚染ポリシー(Data Tainting Policy)」です。データ汚染ポリシーは同一生成元ポリシーとクライアント(ユーザー)のコンピュータの設定を組み合わせたもので、その働きは同一生成元ポリシーとほぼ同じです。データ汚染ポリシーでは、他のドメインを信頼する権限と、別のサーバから提供されたページ内のJavaScriptの変数とオブジェクトにアクセスする権限を制御します。この機能は随意にオン/オフできます。基本的にデータ汚染ポリシーがオフなら、メッセージウィンドウがポップアップして、別のドメインから提供されたページ内のJavaScriptエンティティにはアクセスできない旨が通知されます。

 データ汚染ポリシーはオペレーティングシステムの一部なので、ブラウザからオン/オフすることはできません。各種オペレーティングシステムでデータ汚染ポリシーを有効にする方法は次のとおりです。

  • Windowsの場合:NS_ENABLE_TAINT=1 ― Windows 3.1X、95、98、NTについてはautoexec.batファイルにこのステートメントを挿入します。Windows NTの場合、Data Taintingをユーザー環境変数として設定することもできます。
  • UNIXの場合:NS_ENABLE_TAINT=1 ― 使用するUNIXシェルによって違ってきます。基本的にはset envまたはenvコマンドを使って環境変数を設定します。
  • Macintoshの場合 ― Navigatorアプリケーション自体のタイプenviおよび128のリソースを編集して、NS_ENABLE_TAINTステートメントの前の2つのスラッシュを削除します。NS_ENABLE_TAINTステートメントはドキュメントの終わり近くにあるはずです。
  • OS/2の場合:NS_ENABLE_TAINT=1 ― 起動ドライブのルートにあるconfig.sysファイル内にこのステートメントを設定します。

 データ汚染ポリシーが作用するのはNetscape Navigatorのみです。データ汚染ポリシーは同一生成元ポリシーとほぼ同様の働きをします。つまり、すべてのページ要素の生成元がテストされるわけではなく、次のようなJavaScriptスクリプトに必須の部分だけがテストされます。

  • document ― cookie、domain、lastModified、links、referrer、title、URLの各プロパティ
  • form ― form要素のすべてのインスタンス
  • history ― current、next、previous、toStringの各メソッドおよびプロパティ
  • link ― hash、host、hostname、href、pathname、port、protocol、search、toStringの各メソッドおよびプロパティ
  • location ― hash、host、hostname、href、pathname、port、protocol、search、toStringの各メソッドおよびプロパティ
  • option ― defaultSelected、selected、text、valueの各メソッドおよびプロパティ
  • plugin ― nameプロパティ
  • window ― defaultStatus、name、statusの各メソッドおよびプロパティ

 上記のすべてについて生成元がテストされます。taintEnabled()メソッドを使用すると、データ汚染ポリシーが有効になっているかどうかをテストすることができます。このメソッドは、データ汚染ポリシーが有効ならばtrueを返し、有効でなければfalseを返します。テスト対象にするスクリプト要素を指定することもできます。なお、データ汚染ポリシーはバージョン1.1以前のJavaScriptでしか使用できないことに注意してください。バージョン1.2以降のJavaScriptでは、データ汚染ポリシーとは違うタイプのセキュリティが使われています。それが次に説明する「署名付きスクリプト」です。

次のページ
署名付きスクリプト

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Thomas Valentine(Thomas Valentine)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3583 2009/03/13 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング