6

WCF と名前付きパイプの両方の初心者です。

UI アプリケーションと同じマシン上の Windows サービスとの間で安全に通信する方法が必要です。必要なものは次のとおりです。 - クライアント UI アプリケーションは、さまざまなメッセージ タイプを Windows サービスに送信 (プッシュ) する必要があります。- クライアント UI アプリのニーズは、サービスからさまざまなメッセージ タイプ (プッシュまたはプル) を受け取ります。

(ここでのメッセージは、単純に構造化されたシリアル化されたデータです)。

これで、この交換はすべて、承認されたユーザー アカウント (サービス アカウントとは異なる可能性があります) でのみ行われます。そこで、サービスとユーザー アカウントの両方に対して名前付きパイプの ACL を作成することを考えていました。

ただし、名前付きパイプはストリームのみをサポートします。名前付きパイプを介して交換する必要がある複数のタイプのメッセージがあります。つまり、それらを定義してシリアライズ/デシリアライズする必要があります。

これを回避するために、名前付きパイプで (シリアル化と RPC サポートのために) WCF を使用することを考えました。また、Windows サービスで WCF サービスをホストします。

質問 1) これは良いアプローチですか? 通信はマシン内に留まる必要があるため、WCF の下で http または tcp を使用することに躊躇します。

質問 2) WCF が使用する名前付きパイプの ACL をどのように使用できますか? これは私がコントロールできるものですか?クライアントとサーバー間で認証方式を実装するよりも、特定の SID で名前パイプを ACL 処理する方がセキュリティが向上すると思います。

ポインタ、提案をありがとう!サミール

4

3 に答える 3

8

1)これは良いアプローチだと思います。あなたの考えは的確です。

2)すでにご存知のように、ここでの私のブログ投稿は、 WCFNetNamedPipeバインディングによって作成されたパイプにACLを設定する1つの方法を示しています。これには、リフレクションを使用してMicrosoftの実装のギャップを埋めることが含まれます。これは、元々ACLを設定するための直接メカニズムをサポートすることを目的としていたことは明らかですが、適切に終了しませんでした。

AclSecuredNamedPipeBindingfromCustomBindingと対応するAclSecuredNamedPipeTransportBindingElementfromを導出 しNamedPipeTransportBindingElementます。バインディング要素には、次のリストがありSecurityIdentifierます。

internal List<SecurityIdentifier> AllowedUsers { get { return _allowedUsers; } }
private List<SecurityIdentifier> _allowedUsers = new List<SecurityIdentifier>();

-BuildChannelListener<TChannel>(BindingContext)メソッドは、プライベートプロパティを設定するためにオーバーライドされますAllowedUsers

public override IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)
{
  private static Type namedPipeChannelListenerType 
          = Type.GetType("System.ServiceModel.Channels.NamedPipeChannelListener, System.ServiceModel", false);
  IChannelListener<TChannel> listener = base.BuildChannelListener<TChannel>(context);
  PropertyInfo p = namedPipeChannelListenerType.GetProperty(
          "AllowedUsers", BindingFlags.Instance|BindingFlags.NonPublic);
  p.SetValue(listener, _allowedUsers, null);
  return listener;
}

このルートを使用する場合は、後の投稿で説明するように、「しゃがむ脆弱性」にもパッチを適用してください。

于 2011-02-27T01:22:06.257 に答える
3

非常に役立つこれらの投稿に出くわしました: Exploring the WCF Named Pipe Binding - Part 3 - Chris Dickson's Blog

于 2011-02-25T23:36:30.173 に答える