これは以前の質問からのフォローアップです。アセンブリをロードする前に (ハードディスク上のファイルまたはバイト データを介して)、アセンブリの StrongName を調べたいと考えています。それが私によって作成されたことを確認するため。
Assembly.LoadFrom
またはを使用する際に考慮すべきセキュリティ リスクはありAssembly.Load
ますか? これらの変数に悪意のあるコードをロードすることで、悪意のあるコードが実行される可能性がありますか? これらのアセンブリを AppDomain に読み込んで読み取ることを検討する必要がありますか?
これが私のコードの残りの部分です:
Assembly dll = Assembly.LoadFrom("UnauthorisedPlugin.dll");
byte[] thisDllKey = Assembly.GetExecutingAssembly().GetName().GetPublicKey();
byte[] dllKey = dll.GetName().GetPublicKey();
if (Enumerable.SequenceEqual(thisDllKey, dllKey))
{
Type pluginType = dll.GetTypes().Single();
IPlugin unauthPlugin = (IPlugin)Activator.CreateInstance(pluginType);
Console.WriteLine(unauthPlugin.Run());
}
else
{
Console.WriteLine("The DLL is not authorised");
}
Console.ReadLine();