gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:32:25 25 4
gpt4 key购买 nike

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

In the .NET Framework version 2.0 and later, demands for identity permissions are ineffective if the calling assembly has full trust.



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

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

最佳答案

根据 Eric 的建议,我通过自己检查 key 解决了这个问题。在我要保护的代码中,我添加了以下调用,

EnsureAssemblyIsSignedByMyCompany( Assembly.GetCallingAssembly() );

那么该方法的实现是
  /// <summary>
/// Ensures that the given assembly is signed by My Company or Microsoft.
/// </summary>
/// <param name="assembly"></param>
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." );
}
}

** 名称和 key 已更改以保护无辜者。任何与真实姓名或公司的相似之处都只是巧合。*

关于.net-2.0 - 如何防止未经授权的代码访问 .NET 2.0 中的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/421137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com