ASP.NET コード アクセス セキュリティ
更新 : 2007 年 11 月
ASP.NET を使用して複数の Web サイトをホストする利点の 1 つとして、共通言語ランタイム (CLR: Common Language Runtime) によるコード アクセス セキュリティのサポートがあります。コード アクセス セキュリティは、サーバー アプリケーションの保護に役立ちます。コードは、コードの素性に関する証拠 (たとえば、アセンブリの厳密な名前や発生元のコードの URL など) に基づいて、セキュリティ ゾーンのクラスに割り当てられます。
完全に信頼されて実行するアプリケーションでも、その実行に使用している Windows アカウント (ASP.NET プロセス ID) を使って、NTFS ファイルのアクセス許可やデータベースのアクセス許可などを利用することによって、アクセスを制限できます。詳細については、「ASP.NET プロセス ID の構成」を参照してください。
通常、アセンブリに厳密な名前を付けたり、アセンブリにセキュリティ ポリシーを追加することにより、個々のアセンブリにコード アクセス セキュリティを設定できます。ただし、多くの ASP.NET アセンブリは、ページのコンパイル中に動的に生成されるため、厳密な名前が付けられることはないので、これらのアセンブリにはセキュリティ ポリシーを間接的に設定する必要があります。さらに、ASP.NET では非コンパイル アプリケーションをサポートするため、アセンブリ ベースの証拠はサポートされません。ASP.NET アプリケーションにはディレクトリ構造の概念が組み込まれているので、.NET Framework を各コンピュータの ASP.NET アプリケーションごとに機能するように構成するよりも、ASP.NET アプリケーションのカテゴリをベースにしてコード アクセス セキュリティを構成する方がはるかに簡単です。
ASP.NET では、構成可能な信頼レベルを各アプリケーションに割り当てることができます。これは、あらかじめ定義されているアクセス許可のセットに対応しています。既定では、アプリケーションは、それぞれが提供する証拠に基づいて、各信頼レベルに割り当てられます。Full より低いレベルのアクセス許可セットで Web アプリケーションを実行する場合は、ASP.NET 信頼レベルとポリシー ファイルで事前に定義されている信頼セットの 1 つを使用して、部分信頼ポリシーを適用する必要があります。
アプリケーションの Web.config ファイルの次の構成設定を使用して、既定の動作をオーバーライドし、指定するセキュリティ ポリシーをアプリケーションに割り当てることができます。
<location path="SampleApp" allowOverride="false">
<trust level="High"
originUrl="https://www.contoso.com"/>
</location>
trust 構成要素はコンピュータ レベルで適用することも、任意のアプリケーション ルート ディレクトリに適用することもできます。コンピュータ レベルで適用すると、すべての ASP.NET アプリケーションがその信頼レベルで実行され、任意のアプリケーション ルート ディレクトリに適用すると、その信頼レベルは特定の ASP.NET アプリケーションにのみ適用されます。サイト全体にポリシーを設定する場合は、そのサイトのルート アプリケーションに対する Web.config ファイルを編集し、次の例のように、サイトのルートをパス位置として指定します。
<location path="ContosoSite" allowOverride="false">
<trust level="High"
originUrl="https://www.contoso.com"/>
</location>
信頼されているサイトに対しては、trust 構成要素の level 属性を High に設定することをお勧めします。外部の顧客からのコードを実行するサイトをホストする Web サーバーなど、信頼されていないサイトに対しては、trust 構成要素の level 属性を Medium に設定することをお勧めします。ASP.NET アプリケーションを Medium 信頼レベルで実行する方法の詳細については、「patterns & practices Security Guidance for Applications」の「How To: Use Medium Trust in ASP.NET 2.0」を参照してください。
コンピュータ レベルまたはサイト レベルで信頼レベルを設定する場合は、通常、個々のアプリケーションで信頼レベルを指定できないように、location 要素の allowOverride 属性を false に設定します。これは、共有サーバー インストールでは一般的です。
trust 構成要素に既定でサポートされている属性を次の表に示します。
属性 |
説明 |
サポートされる値 |
---|---|---|
level |
アプリケーションが実行されるセキュリティ ゾーンを指定します。 |
Full、High、Medium、Low、および Minimal。 |
originUrl |
System.Net 名前空間内のクラスを使用した接続アクセス用に許可された URL または URL パターンを指定します。この属性は、WebRequest インスタンスなど、ネットワークのさまざまな位置への接続を許可するオブジェクトに対してアクセス許可をチェックする目的で使用できます。たとえば、ASP.NET ページがその Web アプリケーションと同じ Web ファームに配置されている Web サービスを呼び出すことができるように、この属性をその Web ファーム内のサーバーのホスト名に設定できます。 |
整形式の HTTP URL、つまり WebPermissionAttribute でサポートされる正規表現ベースの構文。 |
CLR がサポートするアクセス許可の種類と、さまざまな信頼レベルにおける各アクセス許可に対する既定のポリシーを次の表に示します。
アクセス許可 |
Full |
High |
Medium |
Low |
Minimal |
---|---|---|---|---|---|
Full |
High |
Medium |
Low |
Minimal |
|
Unrestricted |
Unrestricted |
No permission |
No permission |
No permission |
|
Unrestricted |
Unrestricted |
Unrestricted |
No permission |
No permission |
|
Unrestricted |
Unrestricted |
Read: TEMP、TMP、OS、USERNAME、COMPUTERNAME |
No permission |
No permission |
|
Unrestricted |
Unrestricted |
Read、Write、Append、PathDiscovery: アプリケーション ディレクトリ |
Read、PathDiscovery: アプリケーション ディレクトリ |
No permission |
|
Unrestricted |
Unrestricted |
AssemblyIsolationByUser、Unrestricted UserQuota |
1 MB UserQuota (サイトごとに変更可能)、AssemblyIsolationByUser |
No permission |
|
Unrestricted |
No permission |
No permission |
|||
Unrestricted |
No permission |
No permission |
No permission |
||
Unrestricted |
Unrestricted |
No permission |
No permission |
No permission |
|
Unrestricted |
Execution, Assertion, ControlPrincipal, ControlThread, RemotingConfiguration |
Execution, Assertion, ControlPrincipal, ControlThread, RemotingConfiguration |
|||
Unrestricted |
No permission |
No permission |
|||
Unrestricted |
Unrestricted |
No permission |
No permission |
No permission |
|
Unrestricted |
Unrestricted |
発信元ホストへの Connect (構成されている場合) |
No permission |
No permission |
|
Unrestricted |
Unrestricted |
Unrestricted |
No permission |
No permission |
|
[イベント ログ] |
Unrestricted |
No permission |
No permission |
No permission |
No permission |
メッセージ キュー |
Unrestricted |
No permission |
No permission |
No permission |
No permission |
サービス コントローラ |
Unrestricted |
No permission |
No permission |
No permission |
No permission |
パフォーマンス カウンタ |
Unrestricted |
No permission |
No permission |
No permission |
No permission |
ディレクトリ サービス |
Unrestricted |
No permission |
No permission |
No permission |
No permission |
使用可能でもセキュリティ ポリシー内に明示的に示されていないアクセス許可レベルの場合、Full アクセス許可で実行しているアプリケーションであれば常にこのアクセス許可レベルを使用できます。それより低い信頼レベルで実行しているアプリケーションは、セキュリティ ポリシーを変更することにより、リソースに対して明示的にアクセス許可を付与していない限り、そのリソースを使用できません。
上の表に示されているように、信頼レベルが High のアプリケーションは、それ自体のアプリケーション ディレクトリのファイルに対し、読み取りまたは書き込みのアクセス許可を持ち、信頼レベルが Low のアプリケーションは、それ自体のアプリケーション ディレクトリのファイルに対し、読み取り専用のアクセス許可を持ちます。FileIOPermission 型は物理パス (たとえば、c:\SampleAppPath) に依存するため、ASP.NET はポリシー ファイルでトークン化されたステートメントを使用します。これは、実行時に、アプリケーション用の関連パス情報に置き換えられます。
WebPermission 型は、System.Net.WebRequest などのクラスを使用して、アプリケーションが元のホスト属性によって定義されているネットワーク位置に接続できるようにします。ASP.NET では、指定のアプリケーションの trust セクションにオプションの originUrl 属性を指定することにより、このアクセス許可を設定できます。Web_hightrust.config ファイルの次のセクションに示されているように、originUrl 属性は、ポリシー ファイルの $OriginHost$ 変数の置換に使用されます。
<IPermission class="WebPermission" version="1">
<ConnectAccess>
<URI uri="$OriginHost$"/>
</ConnectAccess>
</IPermission>