Share via


安全なコーディングの概要

このセクションでは、セキュリティ システムと共に動作するコードのさまざまなデザイン方法について概要を説明します。

セキュリティに中立的なコード

セキュリティに中立的なコードは、セキュリティ システムとは明示的には何もしません。受け取ったアクセス許可に基づいて実行するだけです。保護された操作 (ファイルの使用、ネットワーク接続など) に関連するセキュリティ例外のキャッチに失敗したアプリケーションが、処理されない例外という結果になることもありますが、それでもセキュリティに中立的なコードは .NET Framework のセキュリティ技術を利用できます。

セキュリティに中立的なライブラリは特殊な特徴を持っていて、これを理解する必要があります。ライブラリが、ファイルを使用するかアンマネージ コードを呼び出す API 要素を提供するものとします。このコードは、対応するアクセス許可を持たないと、目的どおりには実行されません。しかし、コードがアクセス許可を持っていたとしても、それを呼び出す任意のアプリケーション コードが動作するためには、同じアクセス許可が必要になります。呼び出し元のコードが正しいアクセス許可を持っていない場合は、コード アクセス セキュリティのスタック ウォークの結果として SecurityException が発生します。

再利用可能なコンポーネントではないアプリケーション コード

コードが、他のコードから呼び出されることのないアプリケーションの一部の場合は、セキュリティは単純で、特別なコーディングは必要ありません。しかし、悪意のあるコードは他のコードを呼び出せるため注意が必要です。コード アクセス セキュリティが、悪意のあるコードに対しリソースへのアクセスを停止しても、このようなコードは、機密情報を含むフィールドやプロパティ値を読み取ることができる可能性があります。

また、アプリケーションがインターネットまたは他の信頼できないリソースからのユーザー入力を受け付ける場合は、悪意のある入力にも注意が必要です。

ネイティブなコード実装へのマネージ ラッパー

このシナリオでは、一般的に、マネージ コードで利用するいくつかの役に立つ機能がネイティブ コードで実装されています。マネージ ラッパーは、プラットフォーム呼び出しまたは COM 相互運用を使用して簡単に書くことができます。ただし、これを行う場合、ラッパーの呼び出し元は、呼び出しを成功させるためにアンマネージ コードの権限を持つ必要があります。既定のポリシーでは、これは、イントラネットまたはインターネットからダウンロードしたコードは、ラッパーと共には動作しないことを意味します。

これらのラッパーを使用するすべてのアプリケーションにアンマネージ コードの権限を与えるよりも、これらの権限をラッパー コードだけに与える方が優れています。基になる機能がリソースを公開せず、さらに実装がセーフな場合は、ラッパーは自分自身の権限をアサートするだけでよく、それを通じて呼び出す任意のコードが有効になります。リソースが含まれる場合は、セキュリティのコーディングは、次のセクションで説明するライブラリ コードのケースと同じにする必要があります。ラッパーは呼び出し元をこれらのリソースに公開する可能性があるため、ネイティブ コードの安全性を慎重に検証する必要があります。これはラッパー側で行うことが必要です。

保護されたリソースを公開するライブラリ コード

これは、セキュリティ コーディングにとって最も強力で、それゆえ危険性のある (誤って行った場合) 方法です。ライブラリは、他の方法では利用できない特定のリソースへ他のコードがアクセスするときのインターフェイスとして機能します。ちょうど、.NET Framework のクラスが、使用するリソースへのアクセス許可を強化するのに似ています。どこでリソースを公開する場合でも、コードは最初にリソースに適したアクセス許可を要求する (つまり、セキュリティ チェックを実行する) 必要があります。次に、実際の操作を実行するために自分自身の権限をアサートします。

参照

その他の技術情報

安全なコーディングのガイドライン