C#:限制.Net远程处理仅接受localhost连接

时间:2009-10-07 22:06:18

标签: .net security remoting localhost

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

最好,我希望以不会引起用户防火墙警报的方式将连接绑定到localhost ......但这不是必需的功能。

感谢您的帮助!

汤姆

2 个答案:

答案 0 :(得分:4)

在探索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);

很抱歉拿走你的答案,但我偶然发现了一些能完全回答我问题的内容。

汤姆

答案 1 :(得分:2)

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