Share via


セキュリティと実行時のコード生成

ライブラリによっては、コードを生成し、それを実行することによって、呼び出し元のためになんらかの処理を行います。基本的に問題となるのは、より低い信頼度の代わりにコードを生成し、それをより高い信頼度で実行することです。呼び出し側がコードの生成に影響を及ぼすと問題はさらに悪化するため、安全と考えられるコードだけを生成するように注意してください。

常に、どのようなコードが生成されているのかを知る必要があります。これは、ユーザーから取得する値を厳しく制御することが必要であることを意味します。これらの値は、引用符で囲まれた文字列、ID、またはそれ以外です。引用符で囲まれた文字列は予期しないコード要素を含まないようにエスケープ処理が必要で、ID は有効な ID かどうかをチェックする必要があります。コンパイルされたアセンブリは変更できるため、変更によってその ID に異常な文字が含まれると、セキュリティが脅かされます。このため、ID にも危険性があります。ただし、これがセキュリティ脆弱性になることは稀です。

リフレクション出力を指定してコードを生成することをお勧めします。これは、上記の多くの問題を防ぐのに役に立ちます。

コードをコンパイルするときに、悪意のあるプログラムがなんらかの方法でコードを変更できるかどうかを考慮します。コンパイラがソース コードを読み取る前、またはコードが .dll を読み込む前に、悪意のあるコードがソース ファイルを変更できる時間的なすきまがないかどうかを確認します。ある場合は、コード アクセス セキュリティまたはファイル システムのアクセス制御リストを使用して、これらのファイルが格納されているディレクトリを保護する必要があります。

生成されたコードに呼び出し元が影響を及ぼし、コンパイラ エラーが発生するような場合は、この部分がセキュリティ脆弱性になる可能性があります。

PermitOnly または Deny を使用して、生成されたコードをできる限り低いアクセス許可の設定で実行してください。

参照

その他の技術情報

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