.net - C# : Restrict . 网络远程处理仅接受本地主机连接

标签 .net security remoting localhost

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

最好,我希望以一种不会触发用户防火墙警报的方式将连接绑定(bind)到本地主机...但这不是必需的功能。

感谢您的帮助!

汤姆

最佳答案

我自己在浏览 IpcChannel 文档时偶然发现了这个问题。

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

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

汤姆

关于.net - C# : Restrict . 网络远程处理仅接受本地主机连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1534506/

相关文章:

c# - 客户端应用程序在 C# 中的本地网络上查找服务器的最佳方式是什么?

.net - Windows 服务的 Wix 安装项目导致 FileNotFoundException

.net - IDisposable : Method 'X' has multiple definitions with identical signatures

javascript - 如果带有调试器语句 Javascript 的代码部署在生产环境中,会带来多少安全问题?

security - Logstash:logstash输入中的多个插件

.net - 无法加载类型错误,.Net Remoting

.net - 枚举实用程序库

c# - 功能 'using declarations' 在 C# 7.3 中不可用。请使用语言版本 8.0 或更高版本 - 在一台计算机上出错,但在另一台计算机上正常

php - 动态站点安全风险

c# - 远程设置超时