【问题标题】:Implementing an internal interface over .NET Remoting通过 .NET Remoting 实现内部接口
【发布时间】:2013-04-15 11:32:49
【问题描述】:

我有一个内部接口,我需要通过 .NET 远程处理来实现,以确保只有我们的程序集远程调用这些成员(使用 InternalsVisibleTo 来授予对朋友程序集的访问权限)。但是,当我实现接口并构建它时,我得到了以下错误:

'AssemblyName' does not implement interface member 'InterfaceMember1(...)' 'AssemblyName' cannot implement an interface because it is not public. 

我无法搜索并找到一种方法来完成这项工作。但是,我明确实现了允许我的程序集构建的接口,并且我可以毫无问题地从任何朋友程序集调用远程方法。

我担心我在这个主题上找到的信息缺乏,尤其是在 MSDN 和 StackOverflow 上。通过内部接口实现 .NET 远程处理有什么问题吗?如果是这样,为什么?

编辑 这是我的接口和实现的样子:

界面

internal interface IAdmin
{
    bool TESTPING();
    bool AdminTask1(int val);
    ...
}

实施

public class RService : MarshalByRefObject, IAdmin
{
    //IAdmin members

    bool IAdmin.TESTPING()
    {
        return true;
    }

    bool IAdmin.AdminTask1(int val)
    {
        // do stuff
        return true;
    }
}

【问题讨论】:

    标签: c# .net .net-remoting internalsvisibleto


    【解决方案1】:

    您无法以这种方式实现安全功能。远程规范是开放的,因此任何人都可以创建消息,将其发送到您的远程班级并接收响应。您的服务无法可靠地确定是谁调用了它。

    您可以实现自定义授权,并在每个方法调用中发送一个秘密令牌,以确保只有您的代码调用它。

    【讨论】:

    • 我已经在我的代码中这样做了,我认为将接口设置为内部可能会增加一些额外的安全性,但事实并非如此
    【解决方案2】:

    MSDN:http://msdn.microsoft.com/en-us/library/ms182313(VS.80).aspx

    接口方法有public 可访问性,无法更改 通过实现类型。一个内部 接口创建一个合约,它是 不打算在外部实施 定义 界面。一个公共类型 实现内部方法 使用虚拟修饰符的界面 允许方法被覆盖 一个派生类型,在 部件。如果第二个类型在 定义程序集调用方法和 期望一个仅限内部的合同, 行为可能会受到影响, 相反,在 执行外部汇编。这个 造成安全漏洞。

    【讨论】:

    • 只有当我将接口成员标记为虚拟时,才会覆盖接口成员,这难道不是真的吗?我认为接口成员在 .NET 中默认是密封的?还是我误解了这个漏洞?
    • 接口总是抽象的。 MSDN文章讲的是创建一个类,该类实现接口并将实现的成员设置为虚拟。在您的远程应用程序中,您从新类继承。但在此之前,我会考虑将界面公开。
    猜你喜欢
    • 2016-12-07
    • 2011-03-16
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多