当前位置:  开发笔记 > 程序员 > 正文

如何防止未经授权的代码访问.NET 2.0中的程序集?

如何解决《如何防止未经授权的代码访问.NET2.0中的程序集?》经验,为你挑选了1个好方法。

在.NET 1.x中,您可以在程序集上使用StrongNameIdentityPermissionAttribute,以确保只有您签名的代码才能访问程序集.根据MSDN文档,

在.NET Framework 2.0及更高版本中,如果调用程序集具有完全信任,则对身份权限的要求无效.

这意味着任何具有完全信任的应用程序都可以绕过我的安全需求.

如何防止未经授权的代码访问.NET 2.0中的程序集?



1> Rob Prouse..:

根据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." );
     }
  }

**改名称和密钥以保护无辜者.任何与真实姓名或公司的相似之处仅仅是巧合.*

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有