【问题标题】:C#: Restrict .Net remoting to accept localhost connections onlyC#:限制 .Net 远程处理仅接受 localhost 连接
【发布时间】:2009-10-07 22:06:17
【问题描述】:

我正在使用 .Net Remoting 来处理主服务与小型客户端库的众多(有时 50 多个)实例之间的进程内通信。从安全的角度来看,该服务必须只接受来自本地机器的连接,而不接受来自其他机器的连接——但我找不到任何关于如何做到这一点的信息,而且 MSDN 文档似乎没有多大帮助。

我希望以一种不会触发用户防火墙警报的方式保持连接绑定到 localhost...但这不是必需的功能。

感谢您的帮助!

汤姆

【问题讨论】:

    标签: .net security remoting localhost


    【解决方案1】:

    我自己在探索 IpcChannel 文档时偶然发现了这一点。

    IpcChannel 的问题是当客户端作为低完整性进程运行时,Windows 命名管道在 UAC 下无法正常工作。不幸的是,由于我正在开发一个插件,而不是一个完整的应用程序,插件主机的低完整性意味着调用一堆 Win32 API——包括一些特定于 Vista 的新 API——并以编程方式设置应用程序令牌 ACL,这是我真的不想做。

    幸运的是,RegisterChannel() 的几种重载形式允许您在 System.Collections.IDictionary Hashtable 对象中指定选项,其中一些与安全性和处理远程连接有关。更多信息在这里:

    http://msdn.microsoft.com/en-us/library/bb187434%28VS.85%29.aspx

    我最终将我的代码恢复为 TcpChannel 实现并更改了服务器中的一些内容,它运行良好。没有汗水!

                System.Collections.IDictionary sProperties = new System.Collections.Hashtable();
    
            sProperties["port"] = SERVER_PORT;
            sProperties["authorizedGroup"] = "INTERACTIVE";
            sProperties["rejectRemoteRequests"] = true;
    
            BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
    
            TcpServerChannel channel = new TcpServerChannel(sProperties, serverProvider);   
            ChannelServices.RegisterChannel(channel, false);
    

    很抱歉带走了你的答案,但我偶然发现了一些可以准确回答我问题的东西。

    汤姆

    【讨论】:

      【解决方案2】:

      如果您使用的是 .NET 2.0+,请使用 IpcChannel。它是为进程间通信而设计的,根本不使用 TCP。

      【讨论】:

        猜你喜欢
        • 2011-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多