草庐IT

c# - NetNamedPipeBinding 安全吗?

coder 2024-05-22 原文

我想知道 netNamedPipeBinding 是否被认为是安全的:

一方面,NetNamedPipeBinding 仅在传输层实现安全性,并且它使用 Microsoft 不再推荐的 NTLM (source)(source)

另一方面,Named Pipie 无法从远程计算机访问,并且无法窃听用于传输数据或向其写入数据的特定开放管道实例,除非可以获取句柄有关的具体实例。

这就是为什么我不知道如何考虑这个解决方案的安全性的原因。

最佳答案

您并没有真正提出正确的问题:不可能给出在所有情况下都有效的 bool 值答案。您应该始终从整体上评估解决方案的安全性,识别威胁并对相关的安全风险建模。

也就是说,WCF NetNamedPipeBinding 确实具有安全特性,这使得它与基于网络协议(protocol)的绑定(bind)有些不同:

  • 与任何网络协议(protocol)相比,NetNamedPipeBinding 本质上更安全,可以抵御传输连接上的通信威胁。在命名管道的情况下,消息不是通过网络传输的,而是通过一种机制交换的,该机制涉及将数据字节(通过操作系统 API)传入和传出由单个机器上的操作系统内核管理的内存。消息流不可能被窃听,除非攻击者已经拥有在内核模式下运行的特权代码(并且如果您的操作系统内部已经有这样的攻击者,他可能已经可以对您的应用程序进程做任何他喜欢的事情).因此 WCF“传输安全”is more or less irrelevant to the security of the message stream and should arguably often be disabled in configuration to avoid unnecessary runtime overhead .
  • 命名管道绑定(bind)用于向潜在客户发布服务端点的机制本质上也比基于网络的协议(protocol)更安全:它基于命名的共享内存对象,因此无法从任何远程计算机访问。
  • 用于消息交换的命名管道以 GUID 命名,每次服务器重新启动时该 GUID 都会更改,并进一步受到 ACL 的保护,防止任何远程用户打开它,即使他们能够以某种方式发现当前的 GUID管道名称。

另一方面,基于通过 API 访问的操作系统设施,而不是基于网络通信的公共(public)标准,存在一些特定的安全漏洞,这些漏洞不会出现在基于网络的绑定(bind)中:

  • 服务器“抢注”攻击,其中预期 WCF 服务主机以外的某些进程成功监听命名管道。由于用于保护管道的绑定(bind)创建的 ACL 中存在错误,.NET 3.5 及之前版本中的命名管道绑定(bind)无法抵御此漏洞。 .NET 4 主要纠正了这个错误。
  • Windows 上的命名管 Prop 有内置机制来支持模拟其客户端的命名管道服务器。 WCF NetNamedPipeBinding 包含一个错误,在某些情况下,即使客户端 WCF 绑定(bind)配置为不允许模拟,管道服务器(即 WCF 服务)也可以使用客户端的 Windows 凭据进行此类模拟。

总而言之,您需要根据对您重要的威胁评估您的应用程序/系统的整体安全性,同时考虑您可能考虑的各种绑定(bind)的特定特征。 NetNamedPipeBinding 通常是同机场景的最佳选择。

关于c# - NetNamedPipeBinding 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11798325/

有关c# - NetNamedPipeBinding 安全吗?的更多相关文章

  1. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  2. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  3. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  4. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  5. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  6. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  7. ruby-on-rails - 安全地显示使用回形针 gem 上传的图像 - 2

    默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同

  8. ruby - 使写入文件线程安全 - 2

    我在一个ruby​​文件中有一个函数可以像这样写入一个文件File.open("myfile",'a'){|f|f.puts("#{sometext}")}这个函数在不同的线程中被调用,使得像上面这样的文件写入不是线程安全的。有谁知道如何以最简单的方式使这个文件写入线程安全?更多信息:如果重要的话,我正在使用rspec框架。 最佳答案 您可以通过File#flock给锁File.open("myfile",'a'){|f|f.flock(File::LOCK_EX)f.puts("#{sometext}")}

  9. c# - C# 中的 Flatten Ruby 方法 - 2

    我如何做Ruby方法"Flatten"RubyMethod在C#中。此方法将锯齿状数组展平为一维数组。例如:s=[1,2,3]#=>[1,2,3]t=[4,5,6,[7,8]]#=>[4,5,6,[7,8]]a=[s,t,9,10]#=>[[1,2,3],[4,5,6,[7,8]],9,10]a.flatten#=>[1,2,3,4,5,6,7,8,9,10 最佳答案 递归解决方案:IEnumerableFlatten(IEnumerablearray){foreach(variteminarray){if(itemisIEnume

  10. ruby - 可以像在 C# 中使用#region 一样在 Ruby 中使用 begin/end 吗? - 2

    我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用

随机推荐