1

いくつかのフォルダーがあり、すべてのフォルダーにいくつかの .DLL ファイルが含まれています。DLL は実行できますが、この DLL による独自のフォルダー外での CRUD 操作を禁止する必要があります。

ただし、DLL は、DLL が配置されているフォルダーと同じフォルダーにある限り、必要な保存操作を実行できます。

例えば:

//このコードは正常に実行できます

public static void Create()
{
 string path = Directory.GetCurrentDirectory() + "\\file.txt";
 File.Create(path);
}

//しかし、このコードの実行は禁止しなければなりません

public static void Create()
{
File.Create("../file.txt");
}
4

1 に答える 1

2

.NET には、やりたいことを正確に行うためのセキュリティ機能が組み込まれています。必要なことは、セキュリティ コンテキストを DLL の AppDomain に適用し、アクセスできるものを制限することです

あなたがやりたいことをするために、私が最も興味を持っている可能性のある設定は FileIOPermission. DLL のアクセスを、DLL のロード元のフォルダーのみに制限できます。複数の DLL がある場合は、複数の AppDomains を作成するか、すべての DLL が互いのフォルダーにアクセスできるようにする必要があります (ただし、システム上の他の場所にはアクセスできません)。

DLL を変更して、独自のフォルダーに書き込む必要がなくなった場合、Isolated Storageへの読み取りと書き込みを要求することで、DLL がどこから読み込まれたかは問題になりません。 DLL と同じフォルダー内の他の機密ファイルにします。


考慮すべきことの 1 つは、DLL にアクセス許可をまったく与えず、実行したいことだけを許可する方がよいということです。これは、DLL が制限を回避するために使用する他のことがある可能性があるためです。例: .NET のオブジェクトを経由する代わりに、Windows で API のFileIOPermission呼び出しを P\Invoke した場合、呼び出しを停止しません。FileOpenStream

于 2013-02-23T19:59:06.037 に答える