次の方法で共有


セキュリティに関する質問

公開日: 2007 年 12 月 22 日 (作業者: walterov (英語))

更新日: 2008 年 2 月 25 日 (作業者: walterov (英語))

"完全な信頼" レベルを許可することは推奨されていますか?

一部のワークロードについては、"完全な信頼" レベルが必要になります (アンマネージ呼び出しの作成、リフレクションの使用など)。ほとんどの Web アプリケーションについては、"完全な信頼" レベルに設定する必要はありません。信頼レベルを "中" に設定することをお勧めします (サーバー レベル)。機能の委任を使用すると、各サイト所有者が既定の信頼レベルを変更することを許可できます。サイト所有者は "完全な信頼" レベルを設定するか、"中" の信頼レベルを基に独自の信頼レベルを作成することができます。独自の信頼レベルを作成することで、サイト所有者は信頼レベルを明示的に設定できます。

Access データベースを使用することはできますか?

はい。IIS 6 と同様、"中" の信頼レベルを基に独自の信頼レベルを作成する必要があります。または、"完全な信頼" レベルを使用してください。

匿名ユーザーを変更すべきですか?(定義済みユーザーの安全性はどの程度ですか?)

これに関してはまだはっきりしたことが言えません。IIS では、ASP、PHP、ASP.NET といったスクリプト テクノロジーに制御が渡される前に、匿名ユーザーにトークンが与えられるか、スレッドが偽装されます。制御を渡した後は、IIS は関与しません。スクリプト テクノロジーによってこのトークンがどのように使用されるかについては IIS は関知しません。

たとえば、Classic ASP では偽装スレッドが使用されます。Classic ASP サンドボックスが作成されますが、これは、認証済みユーザーとして実行されているスレッドの偽装を解除できる Classic ASP API が存在しないことを前提としています。

一方、ASP.NET では、匿名ユーザーは既定で使用しません。コードはすべて偽装が解除された状態で実行されます (たとえば、プロセス ID として実行されます)。 もちろん、web.config ファイル (<identity> セクション) で偽装を有効にすることもできます。ただし、ASP.NET は強力なスクリプト テクノロジーなので、新しいスレッドを作成したり (既定で偽装解除されて実行)、現在のスレッドをプロセス ID に戻したりすることは難しくありません。"中" の信頼レベルでも実行できます。スレッドの偽装に関する、信頼レベル "中" の ASP.NET サンドボックスの安全性評価が過去に報告されているかどうかについては不明です。PHP もこの点に関しては検証が行われていません。

繰り返しますが、IIS では、スクリプト テクノロジーがプロセス ID に戻るのを防いだり、プロセス ID として新しいスレッドが作成されるのを防いだりすることはできません。

匿名ユーザーのメリットは、それがもう 1 つの防御層となることです。悪意のあるコードがプロセス ID としてコードを実行する方法は (現時点では) まだ発見されていません。プロセス ID として実行される IIS コードには、特定のリソース (IIS 圧縮キャッシュや ASP.NET 一時ファイルなど) に対する "書き込み" アクセス権限がなければなりません。悪意のあるコードがプロセス ID に戻る方法を知らなければ、プロセス ID が "書き込み" アクセス権限を持っているるリソースに対して、そうしたコードの影響が及ぶこともありません。匿名ユーザーとして実行されているカスタム コードは、書き込みアクセス許可は必要ありません。

"完全な信頼" レベルではなく、信頼レベル "中" を修正して使用する場合、どのような設定が推奨されますか?

Access データベース向けの "推奨される設定" はありません。ASP.NET は変更されていないため (現時点)、IIS 6 での設定は IIS 7 でも引き続き適用できます。

独自の信頼ポリシーを構成する上で参考になる記事が Web 上に多数存在します。

http://msdn2.microsoft.com/ja-jp/library/bb245776.aspx

http://msdn2.microsoft.com/ja-jp/library/ms998341.aspx#paght000020_step3

http://msdn2.microsoft.com/ja-jp/library/ms998326.aspx#paght000017_step2