Web で MSIL を配布する

.NET Framework の実行ファイル (MSIL) を Web ページに掲載すれば、 誰でもダウンロードできて便利なわけですが… そこには、 セキュリティの落とし穴が。


セキュリティの制限によるエラー

何も考えずに、 普通に作成した MSIL の実行ファイルが Web サイトに置いてあるとします。 .NET Framework が入っている環境の Internet Explorer (以下、 IE) は、 MSIL のファイルをダウンロードするように指示しても、 いきなり実行しようとします。 ここで、 セキュリティを考慮したコーディングがされていないと、実行開始時に 次のようなエラーが出る場合があります。

[IEExec.exe - Common Language Runtime Debugging Services] Web ページ上の MSIL へのリンクをクリック (あるいは、 右クリックからダウンロードを指定) すると、 ローカルキャッシュへダウンロードされ、 自動的に実行されます。 実行開始時に、 このようなエラーメッセージが表示され、 プログラムが動作しないことがあります。 あるいは、 実行中に、 セキュリティ例外が発生したというエラーメッセージが出ることもあります。 いくつか原因が考えられるでしょうが、 プログラムがローカルリソース (ローカルマシン上のファイルなど) へアクセスするにもかかわらず、 その権限がプログラムに与えられてない、 というのが最も多いケースでしょう。

対処するには…

基本的には、 ユーザが対処することになります。 インターネットから持ってきたプログラムを信用して実行するかどうかの責任は、 ユーザにある、というポリシーなんでしょう。

ユーザの対処
配布側の協力

プログラムを 「信頼する」 手順

その MSIL のプログラム (.NET では、 「アセンブリ」 と呼びます) が、 信頼できるものならば、 .NET Framework の設定で 「信頼」 してあげれば、 セキュリティチェックされなくなります。 (上記のエラーを回避できます。)

.NET Framework の 「信頼」 レベルを変更するには、 Microsoft .NET Framework Wizards (以下、 Wizard と略す。) を使います。 英語版 .NET Framework で説明します。

注意: アセンブリ署名が付いている場合は、 画面の流れが異なります。 (後述)

通常のアセンブリ (アセンブリ署名無し) の場合

[.net Wizards] .NET Framework がインストールされていれば、 「管理ツール」 (初期状態ではコントロールパネルの中にあります) に Wizard が入っています。 起動すると、 このようなウィンドウが出てきます。 そうしたら、 中央の黄色いアイコン 「Trust an Assembly」 を開きます。

[Trust an Assembly - What Would You Like to Modify?] この最初の画面では、 これから行う設定の影響が及ぶ範囲を指定します。 上を選ぶと PC 全体 (他のユーザーにも影響が及ぶ)、 下は現在のユーザ (あなた) が利用する範囲だけです。 どちらかを選んで [次へ>] ボタンで次の画面へ進みます。

[Trust an Assembly - Which Assembly Do You Want to Trust?] 2番目の画面では、 信頼度を設定するアセンブリ (プログラム) を入力します。 Web ページに置かれているアセンブリの場合は、 http: から始めて全て入力する必要があります。 IE で、 Web ページ上のリンクを右クリックして、 「ショートカットのコピー」 をしてきて、 この入力欄に貼り付けると楽です。

[Trust an Assembly - Choose the Minimum Level of Trust for the Assembly] この画面で信頼度を設定します。 左にあるスライダーを上下して指定します。 一番下は、 実行すること自体を許しません。 一番上は、 ファイルの読み書きを自由にさせます。 上から二番目は、 大雑把に言うとファイルの読み取りだけ許可します。 たいていのプログラムは、 一番上にしてあげないと動かないでしょう。

[Trust an Assembly - Completing the Wizard] 最後の画面です。 設定してきた内容が一覧表示されています。 これでよければ [完了] ボタンで終了します。


アセンブリ署名が付いている場合

途中で、 どの範囲で信頼設定するか、 という画面が出てきます。 日本語版で説明します。

[.NET ウィザード] Microsoft .NET Framework Wizards を起動したところです。 信頼度を設定するアセンブリ名を入力するところまでは、 同じです。

[アセンブリの信頼 - この発行者からのアセンブリ、またはすべてのアセンブリを信頼しますか?] アセンブリ名を指定して、 次の画面に来ると、 このように、 どの範囲まで信頼するかという画面になります。 選択肢は上から順に、
1. 前の画面で指定したアセンブリだけ
2. 同じ発行者証明書 (デジタルサイン) が付いているアセンブリなら全て
3. 同じアセンブリ公開キーが付いているアセンブリなら全て
という意味です。
※ 「バージョン番号を含める」 というのは、 よく分かりません。

[違い] 上の画面のなかに 「違いは?」 と表示されていますが、 そこをクリックすると、 このヒントが出てきます。 読んでみても… いまいち理解できませんね。 (^^;

[アセンブリの信頼 - アセンブリに対する信頼の最低レベルを選択する 次は、 この信頼レベルを設定する画面になります。 あとは、 アセンブリ署名が付いていない場合と同じです。


2002/04/11 Copyright (c)2002 biac

2002/04/12 アセンブリが署名されている場合を追記。