在.NET 1.x中,您可以在程序集上使用StrongNameIdentityPermissionAttribute,以确保只有您签名的代码才能访问程序集.根据MSDN文档,
在.NET Framework 2.0及更高版本中,如果调用程序集具有完全信任,则对身份权限的要求无效.
这意味着任何具有完全信任的应用程序都可以绕过我的安全需求.
如何防止未经授权的代码访问.NET 2.0中的程序集?
根据Eric的建议,我通过自己检查密钥解决了这个问题.在我想要保护的代码中,我添加以下调用,
EnsureAssemblyIsSignedByMyCompany( Assembly.GetCallingAssembly() );
然后该方法的实现是
////// Ensures that the given assembly is signed by My Company or Microsoft. /// /// private static void EnsureAssemblyIsSignedByMyCompany( Assembly assembly ) { if ( assembly == null ) throw new ArgumentNullException( "assembly" ); byte[] pubkey = assembly.GetName().GetPublicKeyToken(); if ( pubkey.Length == 0 ) throw new ArgumentException( "No public key token in assembly." ); StringBuilder builder = new StringBuilder(); foreach ( byte b in pubkey ) { builder.AppendFormat( "{0:x2}", b ); } string pkString = builder.ToString(); if ( pkString != "b77a5c561934e089" /* Microsoft */ && pkString != "abababababababab" /* Ivara */ ) { throw new ArgumentException( "Assembly is not signed by My Company or Microsoft. You do not have permission to call this code." ); } }
**改名称和密钥以保护无辜者.任何与真实姓名或公司的相似之处仅仅是巧合.*