如何防止第三方调用某些方法

本文关键字:方法 调用 何防止 第三方 | 更新日期: 2023-09-27 18:24:47

我有一个正在开发的程序集,用于围绕一些潜在的敏感功能创建一个facade,我希望允许第三方调用其中包含的一些方法,但不能调用其他方法。

我如何防止第三方调用未经授权的方法,因为他们可以访问整个DLL(我不担心他们看到代码,只是执行它)?

这必须与.net紧凑框架兼容,因此不幸的是,无法使用StrongNameIdentityPermission属性。

如何防止第三方调用某些方法

我认为您应该提供两个Facade实现,一个用于公开所有方法的"内部"使用者,另一个用于只公开子集的外部使用者。通过拥有两个独立的构建过程,您可以在只维护一个代码库的同时实现这一点。脑海中浮现的一种技术是使用编译器指令将方法从外部构建中排除,或者如果其他公共方法需要,则将其标记为内部方法。如果您确实提供了带有内部修饰符的敏感方法,您可能还希望实现模糊处理。

编辑

也许它会更干净,而不是在每个方法周围都有使用分部类的指令,为敏感方法定义一个分部类,并将整个类实现放在一个指令中。

    public partial class MyClass
    {
        public void NonSensitive(){}
    }
    #if INTERNAL_BUILD
    public partial class MyClass
    {
        public void Sensitive(){}
    }
    #endif

您可以将这个分部类放在同一个或一个单独的文件中,这可能是一个很好的分离级别,因为您可以将文件名x_Sentive.cs或类似的名称前置。

描述

假设我理解你的问题。

可以使用internal访问修饰符标记方法,使其不可从其他图书馆访问。

但这对安全透视没有帮助,因为总是可以使用反射来运行方法

内部关键字是类型和类型成员的访问修饰符。内部类型或成员只能在同一程序集中的文件中访问

更多信息

  • MSDN-内部(C#参考)

如果第三方可以看到代码,那么他们就可以运行它——你无法阻止它。

请注意,如果您的应用程序正在加载第三方插件,那么您可以加载带有限制的插件程序集,以防止其使用反射-这意味着您可以将这些方法/类标记为internal,以防止插件在应用程序中作为插件加载时调用这些方法。根据敏感功能的性质,从安全角度来看,这可能对您有用,也可能不有用。

有关如何执行此操作的信息,请参阅如何:在Sandbox 中运行部分受信任的代码

您能提供您希望第三方作为Web API使用的功能吗?他们将无法访问源代码或已编译的二进制文件。他们只能看到你想让他们看到的东西。这还将提供额外的安全功能,如呼叫者的身份验证和授权。