怎么保护C#程序集不受未经授权的调用者的影响?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (57)

是否有任何方法可以将程序集保护到类/属性和类/方法级别,以防止从未由我们公司签名的另一个程序集使用/调用它们?

例如:

Foo.dll由我的公司签名,Bar.dll根本没有签名。

Foo的A级 bar有B级

类A具有公共方法GetSomething()类B尝试调用Foo.A.GetSomething()并被拒绝

被拒绝可能是一个例外,或在某些方面被忽略

情景二

Foo.dll由我公司签名,Moo.dll也由我公司签名。

Foo有A级Moo有C级

类A具有公共方法GetSomething()类C尝试调用Foo.A.GetSomething()并且不被拒绝

提问于
用户回答回答于

如果你希望将调用方限制为仅由特定证书签名的代码,你仍然可以使用CAS(不是StrongNameIdentityPermission)。

就像使用任何CAS权限一样使用PublisherIdentityPermission。或者,如果你想要声明性地使用属性

用户回答回答于

显然,你必须对被调用方法中的每个调用执行检查--任何试图执行限制的外部系统都很容易使用反射绕过。

在可以使用的方法中用

new StackTrace().GetFrame(1).GetMethod().Module.Assembly

以获取调用程序集。

callingAssembly.GetName().GetPublicKey()

获取调用程序集的公钥并将其与被叫程序集的公钥进行比较。如果它们匹配-假设所有程序集都用相同的密钥对签名-调用方为合法调用者。

扫码关注云+社区