繁体   English   中英

如何阻止第三方调用某些方法?

[英]How can I prevent a third party from calling certain methods?

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

如果他们可以访问整个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关键字是类型和类型成员的访问修饰符。 内部类型或成员只能在同一程序集中的文件中访问

更多信息

如果第三方可以看到代码,那么他们可以运行它 - 你没有做任何事情来阻止它。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM