我怎样才能防止第三方调用某些方法?

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

我怎么能阻止第三方调用未授权的方法,因为他们可以访问整个DLL(我不关心他们看到代码,只是执行它)?

这必须与.net压缩框架兼容,因此使用StrongNameIdentityPermission属性是不可能的。


我认为你应该发布两个Facade实现,一个用于公开所有方法的“内部”用户,另一个用于公开所有方法的另一个外部实现,另一个只公开所述子集。 您可以通过执行两个单独的构建过程来实现此目的,同时仅保留一个代码库。 我们想到的一种技术是使用编译器指令从外部构建中排除方法,或者如果其他公共方法需要,则将其标记为内部。 如果您使用内部修饰符运送敏感方法,则可能还需要实现混淆。

编辑

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

    public partial class MyClass
    {
        public void NonSensitive(){}
    }

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

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


描述

假设我明白你的问题。

您可以使用internal访问修饰符标记您的方法,使其无法从其他库中访问。

但是,这对安全性并没有帮助,因为始终可以使用反射来运行该方法。

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

更多信息

  • MSDN - 内部(C#参考)

  • 如果第三方可以看到代码,那么他们可以运行它 - 没有什么可以阻止这一点的。

    但是请注意,您有一个加载第三方插件的应用程序,然后您可以加载阻止其使用反射的限制的插件程序集 - 这意味着您可以将这些方法/类标记为internal以防止插件能够调用这些方法在应用程序中作为插件加载时 。 根据敏感功能的性质,从安全的角度来看,这可能会或可能不会对您有用。

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

    链接地址: http://www.djcxy.com/p/57549.html

    上一篇: How can I prevent a third party from calling certain methods?

    下一篇: How to use Mockito to test SOAP messages?