2

テクニカル ドキュメントのいたるところに、トランスポート、メッセージ モード、暗号化されたメッセージ、ssl、https、証明書、信頼できる転送など、WCF 構成オプションが多数定義されていることを知っています... bla bla bla

しかし、私にとっては何の根拠もない言葉に過ぎません。これらのセキュリティ機能を実装しないと、ハッカーやハッカーが WCF 呼び出しを傍受してデータを取得できると言われています。

私の質問は、開発者として、クライアントと WCF サービスの間で渡されるものはすべて、いくつかの構成パラメーターを適用した場合に実際に安全であることを、開発者としてどのように目で見ることができますか (そして、彼らの言っていることを理解せずに彼らの言うことを盲目的に信頼するだけではありません)。それらを適用しないと安全ではありませんか?

それは可能ですか?それに関連するインターネット上の情報を見つけることができませんでした。なし。

たとえば、なぜ http の代わりに https を使用する必要があるのか​​、なぜ endoint 構成に Transport を定義する必要があるのか​​、それ自体には何の意味もないさまざまな奇妙な設定が含まれているため、これらの設定が有効であることを目で確認することはできません。

私は証拠を見る必要があります。Firebug を使用している Firefox では、wcf サービスを呼び出して文字列を渡す webclient default.aspx ページがあり、wcf は "Hello" + 文字列を返します。何を指定しても、クリア テキストで渡された値が表示されます。 .

ありがとう。

4

1 に答える 1

2

ええと、WCF と交換されるすべてのメッセージを確認したい場合は、通常、この手法を使用します。

例: 次の例は WCF での RESTFull 呼び出しですが、この手法は WCF で行われるすべての種類の通信で機能します。

 using (WebChannelFactory<ITestService> cf = new WebChannelFactory<ITestService>(new Uri("http://172.80.1.235/")))
                {
                    ((WebHttpBinding)cf.Endpoint.Binding).MaxReceivedMessageSize = 2147483647;
                    cf.Endpoint.Behaviors.Add(new RestMessageInspector());
                    ITestService channel = cf.CreateChannel();
                    TestJob job = channel.CancelJob(id, new MemoryStream(Encoding.UTF8.GetBytes("<cancel></cancel>")));
                }

この例では、 cf.Endpoint.Behaviors.Add(new RestMessageInspector());を見ることができます。これにより、すべてのコミュニケーションに従うことができます。

クラス RestMessageInspector は次のように作成する必要があります (2 つのインターフェイス IClientMessageInspector と IEndpointBehavior を実装する必要があります)。

public class RestMessageInspector : IClientMessageInspector, IEndpointBehavior
    {
        public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
        {
        }

        public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)
        {
            return null;
        }

        public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
        {

        }

        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
        {
            clientRuntime.MessageInspectors.Add(this);
        }

        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
        {

        }

        public void Validate(ServiceEndpoint endpoint)
        {

        }
    }

次に、ブレークポイントを使用すると、プロセス全体をたどることができます;)そしてすべてのメッセージを見ることができます!

結論として、主なポイントは、これらのインターフェイスを実装する追加の動作を含めることです。

それがあなたを助けることを願っています!

于 2013-07-04T15:23:26.977 に答える